Backbone RequireJS和delegateEvents

时间:2012-08-22 20:18:52

标签: backbone.js

在我的路由器中,我需要这样的视图:

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(); 
}

这似乎解决了这个问题,但我仍然对骨干这个知道这是否是一个有效的模式。

1 个答案:

答案 0 :(得分:0)

在您的视图中的某个时刻,您可能会清除页面上的现有HTML并将其替换为新的HTML。当您清除旧的HTML时,您还应该清除旧的事件处理程序,以便它们不会存在。例如,在您想要渲染newHtml的视图中,您可以执行以下操作:

@$el.off().html(newHtml)