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
问题是当选择的事件被触发时,所选的功能被调用两次?
由于您已经声明了两个实例,因此VirtualFileSelectorView您选择了该事件的两个观察者。
即使您重用旧 View 实例的引用来引用新 View 实例,旧实例仍保持活动状态,因为仍然存在针对它的引用。
这是 Backbone 中非常常见的问题,我认为人们开始称其为“幽灵视图”。
要解决这个问题,您必须绑定unbindView 的所有事件,在您的示例中您可以执行以下操作:
app.virtualFileSelectorView.off( null, null, this );
Run Code Online (Sandbox Code Playgroud)
Derick Bailey 有一篇关于此事的精彩帖子。
另外,我想谦虚地链接到我所做的一项关于此事的研究,以试图理解这种顽强的行为。