视图之间的骨干通信,不同的模式

时间:2016-03-31 17:29:13

标签: events backbone.js mediator

我读过关于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数组中弹出。

此方案的目的是了解视图之间不同的潜在交互(而不是事件聚合器,而您没有中心位置来查看这些交互)。

迫不及待想起你的想法!

1 个答案:

答案 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()方法时,视图将停止监听聚合器。