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)

你说两次是什么意思。正常呈现不会调用回调。请分享完整的代码。你说的两次调用到底是什么意思。正常呈现不会调用回调。请共享完整的代码。抱歉,这似乎完全解除了事件绑定,不再调用回调。抱歉,这似乎完全解除了事件绑定,不再调用回调