2012-02-14 23 views
0

将事件绑定到Backbone boilerplate应用程序的最佳方式是什么?在我的观点中,我一直试图将我的事件直接绑定到与我的视图相关的模型上,但似乎并没有奏效。我看到“namespace.js”中,有一个扩展,像这样Backbone.Events APP键:Backbone样板事件

// Keep active application instances namespaced under an app object. 
app: _.extend({}, Backbone.Events) 

我不完全了解如何使用它,我能够......

让事情在没有样板的情况下工作,但它确实提供了一些非常酷的功能,所以我很乐意能够使用它。谢谢!

ADDED

我所用的代码是用下划线绑定方法,像这样:

this.module.bind('change', this.render); 

但随后,我意识到“this.model”被返回未定义,所以这并未”工作。我真的不确定样板文件是如何让我从视图中引用我的模型的。

+0

你通过backbonejs事件文档看? HTTP://documentcloud.github。com/backbone /#事件 – abraham 2012-02-14 03:54:21

+0

你能发布你试过的代码吗? – 2012-02-14 05:12:31

+0

@abraham我看了一下事件文档。样板制作者已经在连接到DOMWindow的全局可用的名称空间方法中扩展了'app'键。但我不明白这个全球可用的对象如何跟踪我的模型视图的特定更改。 – jordancooperman 2012-02-15 16:36:56

回答

2

我不知道这是否是您从您的代码或只在此输入一个错字复制一个错字,但我相信this.module(这是不确定的)应该this.model,您也必须确保传中当实例,当然你的观点,像这样:

myView = new BBView({model: myModel});

那么你可以说为最新版本骨干this.model.bind('change', this.render);this.model.on('change', this.render);

我经常结合自己的观点,以CH以这种方式在我的模型上发生的愤怒事件。

至于扩展Backbone.Events,我用它的方式是创建一个独立的“事件聚合器”,它可以帮助您在页面上的不同视图之间连接事件。比方说,例如,您对一个需要在另一个视图上引发操作的视图有一些操作。在这种情况下,您可以在实例化它们时将事件聚合器对象作为选项传递给每个视图,以便它们既可以触发事件,也可以绑定到公共对象(即事件聚合器)上的事件。

whatsUp = _.extend({}, Backbone.Events) // the aggregator

myFirstView = new FirstBBView ({whatsUp: whatsUp});

(聚合器显示为this.options.whatsUp视图内)

mySecondView = new SecondBBView2 ({whatsUp: whatsUp});

内部FirstBBView:

this.options.whatsUp.bind('specialEvent', function(arg1,arg2) { // do stuff });

内SecondBBView,当一些重要的事情发生了:

this.options.whatsUp.trigger('specialEvent', {arg1: 'some data', arg2: 'more data'});

对于一个伟大的说明,请参见this great article by Derick Bailey

+0

感谢您的回应!这确实是问题,事件聚合是一个不错的小红利!好资源。 – jordancooperman 2012-02-17 03:05:39