我在骨干视图和this.destoryview()
方法中绑定了一些事件,我称之为this.unbind()
。但这不是解除事件的结果。当一些事件开心时,它被称为有界方法两次。
然后我按this.unbind()
更改this.$el.unbind()
来电,然后才能正常工作。
events:{
'click #closeButton' : 'clearSearch',
// some events
},
initialize: function(options){
this.container = options.container;
},
render: function() {
if(this.oSearchContext.isAdvancedSearchEnabled() == true)
{
this.$el.html(this.advancedSearchSummaryViewTemplate);
}
else
{
this.$el.html(this.advancedSearchTemplate);
}
this.container.append(this.$el);
},
使用this.unbind()
的destroyView方法destroyView : function()
{
if ( this.oAdvancedSearchSummaryView )
this.oAdvancedSearchSummaryView.destroyView();
if ( this.oAdvancedSearchDetailsView )
this.oAdvancedSearchDetailsView.destroyView();
// unbind all events
this.unbind(); // this.$el.unbind() working perfectly
// empty the rendered element
this.$el.empty();
}
请告诉我两种方法之间的差异。
答案 0 :(得分:1)
而不是使用bind
我建议使用Backbone' s listenTo
:
view.listenTo(model, 'change', view.render);
一旦view
被销毁,所有绑定将被自动删除(未绑定);
答案 1 :(得分:1)
您使用var { viewFor } = require("sdk/view/core");
var window = getTabContentWindow(viewFor(tab))
(或现代view.bind
或view.listenTo
)来订阅其他骨干组件,例如收听骨干模型中的更改事件。
您使用view.on
(或现代view.$el.bind
)来收听DOM中的用户互动。
同样的逻辑适用于view.$el.on
或现代unbind
类似的语法和API,目的不同。