主干视图触发全局事件

Backbone view triggers a global event

本文关键字:全局 事件 视图      更新时间:2023-09-26

在一个美好的世界里,主干视图通知底层模型,模型触发事件。将更新本身视为对事件的响应。

如果视图触发了一个事件,而另一个视图响应了这个事件,这合法吗。底层模型可能对此一无所知?

假设我的购物车是一个集合,现在我有一个视图,称之为带有项目计数和总成本的掠影视图,它有一个链接来查看购物车的详细内容。

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

将底层模型排除在游戏之外,是吗?合法吗?

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
  }
});