Events 主干网是定制活动绑定的最佳场所&;自定义偶数触发器

Events 主干网是定制活动绑定的最佳场所&;自定义偶数触发器,events,backbone.js,triggers,bind,Events,Backbone.js,Triggers,Bind,我在集合的bbone视图上进行用户交互时触发了一个自定义事件,我希望它能在另一个不相关的视图上发出更改信号。为此,我使用自定义事件 //a global event object for my pub-sub model var vent = Backbone.extend({}, Backbone.Event); var C1 = Backbone.Collection.extend(); var V1 = Backbone.View.extend( events: { 'cli

我在集合的bbone视图上进行用户交互时触发了一个自定义事件,我希望它能在另一个不相关的视图上发出更改信号。为此,我使用自定义事件

//a global event object for my pub-sub model
var vent = Backbone.extend({}, Backbone.Event);

var C1 = Backbone.Collection.extend();
var V1 = Backbone.View.extend(
  events: {
    'click .appointment': 'clickCallback'
  },

  clickCallback: function(){
    vent.trigger('appointment:selected', apptProps);
  }
);

var c1Obj = new C1([{...}, {...}]);
var v1Obj = new V1({
  collection: c1Obj
});
所以,当用户单击集合视图v1Obj的.appointment元素时,将宣布一个约会:selected事件

现在我想要一个不同的视图V2来响应此事件。哪里是绑定“约会:选定”事件的最佳位置?在视图V2(案例1)的initialize()或V2(案例2)的集合/模型的initialize()或其他地方? 我试图澄清什么是最佳实践,如果有的话

案例1:

var V2 = Backbone.View.extend(
  initialize: function(){
    vent.on('appointment:selected', this.apptSelected, this);
  },
  appSelected: function(apptProps){
    ...
  }
);
案例2:

var C2 = Backbone.Collection.extend(
  initialize: function(){
    vent.on('appointment:selected', this.apptSelected, this);
  },
  appSelected: function(apptProps){
    ...
  }
);

据我所知,用户交互时Bbone的理念是操作数据而不是修改标记,其思想是数据更改级联到视图。如果是这样,原始问题的答案是案例2?

我认为最惯用的方式是:

  • 通过包含在集合中表示“选定”的状态
  • 当用户单击
    .appointment
    时,view1将约会模型添加到SelectedAppoints集合中
  • view2绑定到所选应用程序的正常收藏生命周期事件(添加、删除、重置),并相应地重新呈现自身
  • 两个视图都在其options参数中将此集合设置为
    initialize

只是一个侧面说明,对于主干0.99,<代码>主干对象本身可以用作一个应用范围的事件总线,而不是您的代码>通风口< /Cord>对象。

您可以考虑一些类似的事情。然后,您的视图可以侦听模型更改事件,如
this.listenTo([model/collection],'change:selected',this.apptSelected)