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

Backbone communication between views , a different pattern

我读过有关调解器、事件聚合器的信息,使用 backbone.events ...等等

我需要关于下面的另一种潜在模式的建议,你认为这是邪恶的吗?还是好?如果不好的话 caveats/problems.

这个'pattern'回答了一个很经典的问题。当您在 View1 上单击某些内容时,View2 必须呈现。 View1 和 View2 是独立的(这不是子视图的情况)。在 View1 和 View2 之间,我们将使用 "Actions" 模块(是的,或多或少受到 react/flux 的启发)。

这是伪代码中的计划:

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

删除视图后,我们将在操作中调用取消订阅函数,将特定视图从 _Views 数组中弹出。

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

迫不及待地想看看你对此的看法!

我会让 View2 在聚合器对象上触发一个事件:

onclickwtv: function () {
    Aggregator.trigger('wtc-click');
}

我会让 View1 订阅这个事件:

initialize: function () {
    this.listenTo(Aggregator, 'wtc-click', this.render);
}

让 View1 订阅 Actions 以便 Actions 可以调用 View1.render() 只是实现相同目的的一种迂回方式。你的解决方案有三个决策对象,我的只有两个。而且我的解决方案不需要管理视图状态 - 当调用其 .remove() 方法时,视图将停止监听聚合器。