骨干视图触发全局事件

时间:2012-09-05 13:34:42

标签: javascript-events backbone.js

最近有很多问题,虽然我不能说他们正在加快我的发展步伐。我只是让我感到不舒服。需要缠头。

在一个漂亮的世界骨干视图中通知底层模型,模型触发事件。视图将自身更新为对事件的响应。

如果视图触发事件而另一个视图响应此事件,则它是否合法。基础模型甚至可能对此没有任何线索?

假设我有一个购物车是一个集合,现在我有一个视图称之为项目数和总成本的一瞥视图,其中包含查看购物车详细内容的链接。

因此,用户单击视图触发事件的链接,但这会被控制器或除模型之外的任何其他方捕获。

让底层模型退出游戏,是吗?合法的?

1 个答案:

答案 0 :(得分:4)

Backbone的优点在于其灵活性,并且它不要求您严格遵守特定的架构。

因此,一个视图触发事件没有问题,另一个视图直接响应此事件而不更改模型上的任何内容。

但是,需要提出的问题是实施该架构最简洁的方法。

在我看来你所描述的情况时,我会使用一个全局事件对象来让两个视图相互通信。

这是一些示例代码

var globalEvents = {};
_.extend(globalEvents, Backbone.Events);

var GlimpseView = Backbone.View.extend({
  events: {
    'click a.see-verbose': 'onSeeVerboseClick'
  },

  onSeeMoreClick: function() {
    globalEvents.trigger('seeVerbose', this.model);
  }
});

var VerboseView = Backbone.View.extend({
  initiliaze: function() {
    globalEvents.on('seeVerbose', onSeeVerbose, this);
  },

  onSeeVerbose: function(model) {
    // code to render the verbose view
  }
});