关于javascript:将控制器操作传递给EmberJS中的组件将返回未定义

Pass controller action to a component in EmberJS returns undefined

我在EmberJS中有一个带有操作的控制器,在路由模板内部,我正在调用一个组件,并将该控制器的操作作为参数传递给该组件。就像EmberJS 2.20中的文档所说的那样,通过操作触发更改
当我尝试在组件内部调用"parent"动作时,返回值是不确定的,但是如果我在控制台上放置"this"元素并检查其attr,则该函数在那里。
控制器js代码:

1
2
3
4
5
6
7
8
9
10
11
12
export default Ember.Controller.extend({
  firstName:'',
  lastName:'',
  actions: {
    addAlumn (){
      this.store.createRecord('alumn',{
        firstName : this.get('firstName'),
        lastName : this.get('lastName')
      });
    }
  }
});

路由hbs模板:

1
{{#validated-form submit=(action 'addAlumn') saveBtn=true }} ... {{/validated-form}}

验证形式的hbs模板

1
2
3
4
{{yield}}
{{#if saveBtn}}
Add <span class="icon-check"></span>
{{/if}}

验证形式的js代码

1
2
3
4
5
6
7
8
9
export default Ember.Component.extend({
  actions : {
    validateAndSubmit(){
      console.log('validate');
      console.log(this);
      console.log(this.get('submit')());
    }
  }
});

正如我所说,在控制台上的结果是:

1
2
3
> validate
> Class {__ember1449505261281:"ember496", __ember_meta__: Meta, parentView: Class, HAS_BLOCK [id=__ember1449505261281400801945202]: true, _targetObject: Classa€|}
> undefined

关于为什么不触发事件的任何线索?也许是因为该指导示例仅与组件一起使用,而我正在使用控制器?


只需使用componentInstance.sendAction,请:

1
2
3
4
validateAndSubmit() {
  console.log('validate');
  this.sendAction('submit');
}

正在运行的演示。