在我的路由器中,我需要这样的视图:
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();
}
这似乎解决了这个问题,但我仍然对骨干这个知道这是否是一个有效的模式。
答案 0 :(得分:0)
在您的视图中的某个时刻,您可能会清除页面上的现有HTML并将其替换为新的HTML。当您清除旧的HTML时,您还应该清除旧的事件处理程序,以便它们不会存在。例如,在您想要渲染newHtml的视图中,您可以执行以下操作:
@$el.off().html(newHtml)