我的 View TuneBook
有几个 ClosedTune
类型的 subview 。 OpenTune
,我还为每首曲子提供了单独的完整页面浏览量。相同的事件绑定(bind)在 ClosedTune
和 OpenTune
中,因此我设计了我的应用程序,使它们都继承自共享的“抽象” View Tune
.
为了使我的应用程序更具可扩展性,我希望将每个 ClosedTune
的事件委托(delegate)给 TuneBook
,但为了可维护性,我希望使用相同的处理程序(存储的那些在 Tune
中)以供 TuneBook
使用(尽管它们显然需要包含在某些函数中)。
我遇到的问题是,在 TuneBook
中,找到正确的 ClosedTune
来调用处理程序。构建此架构的好方法是什么,或者是否有其他好的解决方案可以将事件委托(delegate)给父 View ?
注意 - 不是 Backbone View: Inherit and extend events from parent 的副本(这是关于从父类继承的子类,而我问的是 DOM 中父类的子节点的子类)
最佳答案
在您的父 View 中(也从 Backbone.Events
扩展),我会将 onEvent
绑定(bind)到 DOM 事件。在触发时,它会触发一个 Backbone 事件,其中包括您的 subview 知道的一些“id”属性(大概是一些行 ID?)。
var TuneBook = Backbone.View.extend(_.extend({}, Backbone.Events, {
events: {
"click .tune .button": "clickHandler"
},
clickHandler: function (ev) {
this.trigger('buttonClick:' + ev.some_id_attr, ev);
},
}));
然后, subview 自然会订阅与他们相关的父 View 事件。下面我在 initialize
中执行此操作,传递父 View 以及您之前在 options
中使用的特殊 id 属性。
var ClosedTune = Backbone.View.extend({
initialize: function (options) {
options.parent.on('buttonClick:' + options.id, this.handler, this);
},
handler: function (ev) {
...
},
});
当然,您也可以在 Tune
或 OpenTune
上设置类似的订阅者。
关于javascript - 将事件委托(delegate)给 Backbone 中的父 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485610/