【问题标题】:Backbone boilerplate Events骨干样板事件
【发布时间】:2012-02-14 03:26:52
【问题描述】:

将事件绑定到Backbone boilerplate 应用程序的最佳方式是什么?在我的视图中,我一直试图将我的事件直接绑定到与我的视图关联的模型,但它似乎不起作用。我在“namespace.js”中看到,有一个应用程序键可以像这样扩展 Backbone.Events:

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

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

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

添加

我使用的代码是下划线绑定方法,如下所示:

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

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

【问题讨论】:

  • 你看过backbonejs事件文档了吗? documentcloud.github.com/backbone/#Events
  • 你能贴出你试过的代码吗?
  • @abraham 我查看了活动文档。样板的制造者在命名空间方法中扩展了“app”键,该方法附加到 DOMWindow,并且全局可用。我仍然不明白该全局可用对象如何跟踪我的模型视图之一的特定更改。

标签: backbone.js


【解决方案1】:

我不确定这是您从代码中复制的错字还是仅在此处输入的错字,但我相信 this.module(未定义)应该this.model ,当然,在实例化视图时也必须确保将其传递,如下所示:

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

那么你可以说this.model.bind('change', this.render);this.model.on('change', this.render); 获取最新版本的Backbone

我经常以这种方式绑定我的视图以更改模型上的事件。

至于扩展 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

【讨论】:

  • 感谢您的回复!这确实是问题所在,事件聚合器是一个不错的小奖励!不错的资源。
猜你喜欢
  • 2012-04-03
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多