我的观点TuneBook
有几种类型的子视图ClosedTune
.每个曲调我也有单独的整页视图OpenTune
.同样的事件中约束ClosedTune
和OpenTune
,所以我设计我的应用程序,使他们无论从共享"抽象"视图继承Tune
.
为了使我的应用程序更具可扩展性,我希望将每个事件ClosedTune
委托给TuneBook
,但为了可维护性,我希望使用相同的处理程序(存储在其中的处理程序Tune
)TuneBook
(尽管它们显然需要包含在某些函数中).
我遇到的问题是,TuneBook
找到正确ClosedTune
的调用处理程序.构建这个的好方法是什么,还是有其他好的解决方案将事件委托给父视图?
注意 - 不是Backbone View的重复:从父类继承和扩展事件(这是关于从父类继承的子节点,而我问的是DOM中父节点的子节点的子节点)
javascript model-view-controller events delegation backbone.js
在骨干网中,我们有一个使用事件聚合器的应用程序,位于window.App.Events
现在,在许多视图中,我们绑定到该聚合器,我手动在视图上编写了一个destroy函数,该函数处理来自该事件聚合器的解除绑定,然后删除视图.(而不是直接删除视图).
现在,某些模型我们也需要这个功能,但我无法弄清楚如何解决它.
某些模型需要绑定到某些事件,但也许我错了,但如果我们从集合中删除一个模型,由于这些绑定到仍然存在的事件聚合器,它会保留在内存中.
模型上没有真正的删除功能,就像视图一样.那我怎么解决这个问题呢?
编辑 请求,一些代码示例.
App = {
Events: _.extend({}, Backbone.Events)
};
var User = Backbone.Model.extend({
initialize: function(){
_.bindAll(this, 'hide');
App.Events.bind('burglar-enters-the-building', this.hide);
},
hide: function(burglarName){
this.set({'isHidden': true});
console.warn("%s is hiding... because %s entered the house", this.get('name'), burglarName);
}
});
var Users = Backbone.Collection.extend({
model: User
});
var House = Backbone.Model.extend({
initialize: function(){
this.set({'inhabitants': new Users()});
},
evacuate: function(){
this.get('inhabitants').reset();
}
});
$(function(){
var myHouse = new House({});
myHouse.get('inhabitants').reset([{id: 1, name: 'John'}, {id: 1, name: 'Jane'}]);
console.log('currently living …
Run Code Online (Sandbox Code Playgroud)