卸载主干视图并注销事件
Unload backbone view and unregister events
我正在尝试创建一个简单的编辑器,在这里你可以点击一个元素,用简单的输入加载一个脚本模板,当我键入时,我希望更新到DOM元素。问题是,如果我点击标题,那么介绍并开始键入标题和介绍的文本都会更新。如何"卸载"视图并只让一个视图存在?
$(function() {
window.Brick = Backbone.View.extend({
initialize: function() {},
render: function() {
this.$el.mouseenter(function() {
$(this)
.css('outline', 'solid #467ace 1px')
.css('outline-offset', '-1px')
.css('cursor', 'pointer');
}).mouseleave(function() {
$(this)
.css('outline', 'none')
.css('cursor', 'default');
});
},
events: {
"click": "openEditor"
},
openEditor: function(event) {
event.preventDefault();
console.log('load editor');
var self = this;
self.editorView = new MyView({
el: $('#editor-panel'),
editorName: self.$el.attr('data-brick-name'),
editor: self.$el
});
}
});
window.MyView = Backbone.View.extend({
editorName: null,
editor: null,
initialize: function(options) {
_.extend(this, _.pick(options, "editorName"));
_.extend(this, _.pick(options, "editor"));
this.render();
},
render: function() {
var self = this;
// Compile the template using underscore
var template = _.template($('#' + self.editorName).html());
// Load the compiled HTML into the Backbone "el"
this.$el.html(template);
},
events: {
'keyup :input': 'logKey'
},
logKey: function(e) {
console.log($(this.editor).text());
$(this.editor).text($(e.currentTarget).val());
}
});
});
$(function() {
$('[data-editable="true"]').each(function(e) {
console.log(e);
var self = $(this);
var brick = new Brick({
el: self
}).render();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
<h1 data-editable="true" data-brick-name="heading">Lorem ipsum</h1>
<p data-editable="true" data-brick-name="intro">Lorem ipsum dolar sit amet...</p>
<div id="editor-panel">
</div>
<script type="text/template" id="heading">
<label for="Heading">Rubrik</label>
<input name="Heading" type="text" value="Lorem ipsum" />
</script>
<script type="text/template" id="intro">
<label for="Intro">Intro</label>
<textarea name="Intro">Lorem ipsum dolar sit amet...</textarea>
</script>
我想您正在寻找undelegateEvents
。来自文档:
取消删除事件;删除视图的所有委派事件。如果您想暂时禁用视图或从DOM中删除视图,这将非常有用。
在Header视图上调用它将阻止它在其他输入处理键盘事件时对键盘事件做出反应。您可以通过delegateEvents
重新附加事件侦听器。
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- 卸载主干视图并注销事件
- 区分浏览器关闭事件和注销
- 何时在 Cocos2d-js 3.2 中注销事件监听器和定时回调
- 在 django 登录和注销事件上运行 javascript
- Chrome浏览器Google帐户注销或Google帐户切换事件