Backbone 从以前的视图中删除事件
Backbone remove events from previous view
可能是对Backbone的事件机制不了解导致的问题
要么我得到以前的事件仍然附加,要么当前事件没有触发。
如果我不使用$('body').off()
或this.$el.off()
(我的目标是body
)显然一切都会保留因为Backbone
的事件模型附加并收听 body
.
上传播的内容
如果我在initialize
方法中使用$('body').off()
或this.$el.off()
,像这样:
module.exports = Backbone.View.extend({
initialize: function(){
this.KontaktViewTemplate = $.ajax({ url:'index.php/templateget/kontakt', dataType:'text', cache:true});
this.$el.off();
this.render();
},
render: function(){
var $el = this.$el;
this.KontaktViewTemplate.done(function(text){
$el.html(text);
});
},
events: {
'click div': "Alert"
},
Alert: function(){
alert('Example');
}
});
我什至不'click div': "Alert"
工作。
我最好的猜测是来自 Backbone 的 View
的事件甚至在调用 initialize
方法之前就已附加,因此 .off()
调用来得太晚并将它们清除.
我应该在 Backbone 之外处理吗?
Backbone 视图的事件只是命名空间 jQuery 事件 (source).
delegate: function(eventName, selector, listener) {
this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);
return this;
},
它们在视图构造函数中 initialize
之前的 setElement
function (source) which is called in _ensureElement
中被委托。
如果一个元素与多个 Backbone 视图共享,或者如果您在多个地方重复使用相同的视图,您可能会遇到事件仍然附加或加倍的问题。
假设您的视图与默认视图一样 div
并且您希望它使用现有元素 <div id="existing"></div>
并且 div 已经附加了事件。
您将执行以下操作:
view.setElement($('#existing'));
setElement
将首先取消委派来自 view
的事件。其他地方附加的任何事件仍将附加。然后,它从 events
视图 属性.
中委托事件
可能是对Backbone的事件机制不了解导致的问题
要么我得到以前的事件仍然附加,要么当前事件没有触发。
如果我不使用
$('body').off()
或this.$el.off()
(我的目标是body
)显然一切都会保留因为Backbone
的事件模型附加并收听body
. 上传播的内容
如果我在
initialize
方法中使用$('body').off()
或this.$el.off()
,像这样:module.exports = Backbone.View.extend({ initialize: function(){ this.KontaktViewTemplate = $.ajax({ url:'index.php/templateget/kontakt', dataType:'text', cache:true}); this.$el.off(); this.render(); }, render: function(){ var $el = this.$el; this.KontaktViewTemplate.done(function(text){ $el.html(text); }); }, events: { 'click div': "Alert" }, Alert: function(){ alert('Example'); } });
我什至不'click div': "Alert"
工作。
我最好的猜测是来自 Backbone 的 View
的事件甚至在调用 initialize
方法之前就已附加,因此 .off()
调用来得太晚并将它们清除.
我应该在 Backbone 之外处理吗?
Backbone 视图的事件只是命名空间 jQuery 事件 (source).
delegate: function(eventName, selector, listener) { this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener); return this; },
它们在视图构造函数中 initialize
之前的 setElement
function (source) which is called in _ensureElement
中被委托。
如果一个元素与多个 Backbone 视图共享,或者如果您在多个地方重复使用相同的视图,您可能会遇到事件仍然附加或加倍的问题。
假设您的视图与默认视图一样 div
并且您希望它使用现有元素 <div id="existing"></div>
并且 div 已经附加了事件。
您将执行以下操作:
view.setElement($('#existing'));
setElement
将首先取消委派来自 view
的事件。其他地方附加的任何事件仍将附加。然后,它从 events
视图 属性.