Ember在视图组件和控制器之间进行通信

时间:2015-02-28 03:07:30

标签: ember.js

我有一个仪表板,里面有一些按钮,可以过滤到posts

此信息中心显示在所有页面中,因此我创建了一个视图dashboard,其中包含相同名称的模板。

要触发过滤器,我创建了一个视图filter-button

export default Ember.View.extend(Ember.TargetActionSupport, {
  tagName: 'button',
  click(event) {
    this._toggleComponentState();
    this._dispatchAction();
  },
  _dispatchAction() {
    this.triggerAction({
      action: "filter",
      target: this.get('controller'),
      actionContext: this.get('context')
    });
  },
  _toggleComponentState() {
    this.$().toggleClass('active');
  }
});

此行为filter已发送至application controller,但我需要发送给特定控制器posts.index,层次结构帖子和信息中心没有连接。如何在我的组件之间正确创建通信?

1 个答案:

答案 0 :(得分:1)

要触发从控制器A到控制器B的操作,您需要在A needs中使用B.然后你可以this.get('controllers.b').send('someAction')

示例代码:

App.IndexController = Ember.Controller.extend({
  needs: ['foo'],

  actions: {
    lolAction: function() {
      var fooCtrl = this.get('controllers.foo');
      fooCtrl.send('anotherLolAction');
    }
  }
});

演示:http://emberjs.jsbin.com/tevagu/1/edit?html,js,output

但正如@sushant所说,停止使用控制器和视图。

仅在每条路线上使用控制器和视图。 E. g。任何路线都有一个控制器,一个视图和一个模板(并且您不必全部明确定义它们)。

对于嵌套在路径模板中的内容,请勿使用控制器和视图。改为使用组件。