事件发生两次

Mar*_*cus 8 backbone.js backbone-events backbone-views

我正在声明一个这样的视图:

var VirtualFileSelectorView = Backbone.View.extend({
    selected: function() {
        console.log("selected function");
    },

    initialize: function() {
        // Shorthand for the application namespace
        var app = brickpile.app;
        // bind to the selected event
        app.bind('selected', this.selected, this);
    }
});
Run Code Online (Sandbox Code Playgroud)

然后我实例化了这个View的两个实例,你可以在这里看到:http://cl.ly/H5WI

问题是当选择事件被触发时,所选功能被调用两次?

fgu*_*len 1

由于您已经声明了两个实例,因此VirtualFileSelectorView选择了该事件的两个观察者

即使您重用旧 View 实例的引用来引用新 View 实例,旧实例仍保持活动状态,因为仍然存在针对它的引用。

这是 Backbone 中非常常见的问题,我认为人们开始称其为“幽灵视图”

要解决这个问题,您必须绑定unbindView 的所有事件,在您的示例中您可以执行以下操作:

app.virtualFileSelectorView.off( null, null, this );
Run Code Online (Sandbox Code Playgroud)

Derick Bailey 有一篇关于此事的精彩帖子

另外,我想谦虚地链接到我所做的一项关于此事的研究,以试图理解这种顽强的行为。