我有这样一个组件:
App.MyNiceComponent = Ember.component.extend({
actions: {
save: function () { … }
}
});
它的模板:
<h1>My Nice Component</h1>
{{ yield this }}
另一个模板中的任何地方:
{{#my-nice as |mn| }}
…
<a onclick={{ action 'save' }}>Save</save>
{{/my-nice}}
单击Link使Ember尝试触发路径控制器中的Action。我想那是因为我们在这里使用的版本太旧了,但是有没有办法让ember调用组件Action,或者只是将一个函数引用移交给链接,这样就调用了它?
在另一个设计用于拥有某些子组件的组件中,我可以设法这样做:
App.AChildComponent = Ember.Component.extend({
targetObject: Em.computed.alias('parentView'),
task: '',
action: 'onChildClick', //present as Action in the parent Compoent
click: function(){
this.sendAction('action', this.get('task'));
}
})
在hbs中,这看起来像是:
{{#my-nice}}
{{#a-child task="do this"}}
{{/my-nice}}
在这种情况下,我真的很想让ember触发组件动作,而无需通过控制器......
提前致谢。
答案 0 :(得分:1)
@philipp,您可以使用操作助手将操作从组件传递到任何位置(将action "actionName"
作为yield中的另一个参数传递)。例如: - 在您的情况下<h1>My Nice Component</h1>
{{yield (action "save")}}
{{#my-nice as |saveAction| }}
…
<a onclick={{ action saveAction }}>Save</save>
{{/my-nice}}