Backbone.js 主干网要求和委派事件
在我的路由器中,我需要如下视图:Backbone.js 主干网要求和委派事件,backbone.js,Backbone.js,在我的路由器中,我需要如下视图: require(['views/business-detail-view'], function(BusinessDetailView) { var businessDetailView = new BusinessDetailView({collection: businessOverviewCollection.models[id], id: id}); businessD
require(['views/business-detail-view'],
function(BusinessDetailView) {
var businessDetailView = new BusinessDetailView({collection: businessOverviewCollection.models[id], id: id});
businessDetailView.render();
}
);
events: {
'click #about-btn' : 'aboutHandler',
'click #contact-btn' : 'contactHandler',
'click #deals-btn' : 'dealsHandler',
'click #map-btn' : 'mapHandler'
},
在视图中,我绑定了如下事件:
require(['views/business-detail-view'],
function(BusinessDetailView) {
var businessDetailView = new BusinessDetailView({collection: businessOverviewCollection.models[id], id: id});
businessDetailView.render();
}
);
events: {
'click #about-btn' : 'aboutHandler',
'click #contact-btn' : 'contactHandler',
'click #deals-btn' : 'dealsHandler',
'click #map-btn' : 'mapHandler'
},
现在的问题是,如果视图在第一次调用回调时被呈现,那么回调将被调用。但是,如果需要在其他地方再次呈现视图,则会调用回调两次,以此类推
我怎样才能防止这种情况发生,或者我做错了什么
更新:
同时,我已将路由器中的代码更改为:
if ( !businessDetailView ) {
require(['views/business-detail-view'],
function(BusinessDetailView) {
businessDetailView = new BusinessDetailView({collection: businessOverviewCollection.models[id]});
businessDetailView.render();
}
);
}
else {
businessDetailView.collection = businessOverviewCollection.models[id];
businessDetailView.render();
}
这似乎解决了问题,但我仍然不知道这是否是一个有效的模式。在您看来,您可能会清除页面上现有的HTML,并用新的HTML替换它。当您清除旧的HTML时,您还应该清除旧的事件处理程序,这样它们就不会到处乱放。例如,在视图中,当您要呈现新HTML时,可以执行以下操作:
@$el.off().html(newHtml)
在您看来,您可能会清除页面上现有的HTML,并将其替换为新的HTML。当您清除旧的HTML时,您还应该清除旧的事件处理程序,这样它们就不会到处乱放。例如,在视图中,当您要呈现新HTML时,可以执行以下操作:
@$el.off().html(newHtml)
你说两次是什么意思。正常呈现不会调用回调。请分享完整的代码。你说的两次调用到底是什么意思。正常呈现不会调用回调。请共享完整的代码。抱歉,这似乎完全解除了事件绑定,不再调用回调。抱歉,这似乎完全解除了事件绑定,不再调用回调