将事件绑定到Backbone boilerplate应用程序的最佳方法是什么?在我的观点中,我一直在尝试将我的事件直接绑定到与我的视图相关联的模型,但它似乎并没有起作用。我在'namespace.js'中看到,有一个app键可以像这样扩展Backbone.Events:
// Keep active application instances namespaced under an app object.
app: _.extend({}, Backbone.Events)
我不完全明白如何使用它......
我能够在没有样板的情况下工作,但它确实提供了一些非常酷的功能,所以我很乐意能够使用它。谢谢!
ADDED
我正在使用的代码是下划线绑定方法,如下所示:
this.module.bind('change', this.render);
然而,我意识到'this.model'返回undefined,所以这不起作用。我真的不确定样板文件是如何让我从视图中引用我的模型的。
答案 0 :(得分:2)
我不确定你是从你的代码中复制过的拼写错误还是只在这里输入的拼写错误,但我相信this.module
(未定义) 应该{ {1}},当你实例化视图时,你也必须确保传递,当然,如下:
this.model
然后您可以为最新版本的Backbone说myView = new BBView({model: myModel});
或this.model.bind('change', this.render);
我经常将我的观点绑定到以这种方式更改模型上的事件。
至于扩展Backbone.Events,我使用它的方式是创建一个独立的“事件聚合器”,它将帮助连接页面上不同视图之间的事件。例如,假设您在一个视图上有一些需要在另一个视图上启动操作的操作。在这种情况下,您可以在实例化时将事件聚合器对象作为选项传递给每个视图,以便它们既可以触发事件,也可以绑定到公共对象(即事件聚合器)上的事件。
this.model.on('change', this.render);
whatsUp = _.extend({}, Backbone.Events) // the aggregator
(聚合器在视图中显示为myFirstView = new FirstBBView ({whatsUp: whatsUp});
)
this.options.whatsUp
在FirstBBView中:
mySecondView = new SecondBBView2 ({whatsUp: whatsUp});
在SecondBBView中,当发生重要事情时:
this.options.whatsUp.bind('specialEvent', function(arg1,arg2) {
// do stuff
});
如需更好的解释,请参阅this great article by Derick Bailey