我读过关于mediator,事件聚合器,使用,backbone.events等等
我需要建议下面的另一个潜在模式,你认为这是邪恶吗?还是好的?如果不好的话,有什么警告/问题。
这种“模式”回答了一个非常经典的问题。当您单击View1上的某些内容时,View2必须呈现。 View1和View2是独立的(这不是子视图的情况)。在View1和View2之间,我们将使用“Actions”模块(或多或少受到react / flux的启发)。
这是pseudoCode中的计划:
View1:
initialize:
Actions.subscribe(this, 'view2);
View2:
onclickwtv:
Actions.displayView2();
Actions:
this._Views = [];
subscribe(view, viewName):
this._Views[viewName] = view;
displayView2:
this._Views['view2'].render(); // or show or wtv function needed
当删除视图时,我们会在动作中调用unsubsribe函数,从而将特定视图从_Views数组中弹出。
此方案的目的是了解视图之间不同的潜在交互(而不是事件聚合器,而您没有中心位置来查看这些交互)。
迫不及待想起你的想法!
答案 0 :(得分:1)
我希望View2在Aggregator对象上触发一个事件:
onclickwtv: function () {
Aggregator.trigger('wtc-click');
}
我希望View1订阅此活动:
initialize: function () {
this.listenTo(Aggregator, 'wtc-click', this.render);
}
让View1订阅Actions,以便Actions可以调用View1.render(),这只是实现同样事情的一种方式。你的解决方案有三个决策对象,我的只有两个。我的解决方案不需要管理视图状态 - 当调用.remove()
方法时,视图将停止监听聚合器。