Emberjs 1.13.0-组件的调用操作

时间:2016-11-17 15:38:51

标签: ember.js

我有这样一个组件:

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触发组件动作,而无需通过控制器......

提前致谢。

1 个答案:

答案 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}}