我有一个仪表板,里面有一些按钮,可以过滤到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
,层次结构帖子和信息中心没有连接。如何在我的组件之间正确创建通信?
答案 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。任何路线都有一个控制器,一个视图和一个模板(并且您不必全部明确定义它们)。
对于嵌套在路径模板中的内容,请勿使用控制器和视图。改为使用组件。