2015-12-07 23 views
0

我在EmberJS中有一個控制器,其中包含一個動作,在我調用組件的路由模板中,並將控制器的動作作爲參數傳遞給組件。就像文檔中說的EmberJS 2.20 Triggering changes with actions
當我試圖調用組件內部的"parent"動作時,返回值是未定義的,但是如果我拋出控制檯"this"元素並檢查它的attr,函數就在那裏。
控制器js代碼:將控制器動作傳遞給EmberJS中的組件將返回undefined

export default Ember.Controller.extend({ 
    firstName:'', 
    lastName:'', 
    actions: { 
    addAlumn(){ 
     this.store.createRecord('alumn',{ 
     firstName : this.get('firstName'), 
     lastName : this.get('lastName') 
     }); 
    } 
    } 
}); 

路線HBS模板:

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

經驗證的形式HBS模板

{{yield}} 
{{#if saveBtn}} 
<a href="#" class="btn primary save"{{action "validateAndSubmit"}}>Add <span class="icon-check"></span></a> 
{{/if}} 

驗證-FO RM js代碼

export default Ember.Component.extend({ 
    actions : { 
    validateAndSubmit(){ 
     console.log('validate'); 
     console.log(this); 
     console.log(this.get('submit')()); 
    } 
    } 
}); 

正如我所說的,結果在控制檯上有:

> validate 
> Class {__ember1449505261281: "ember496", __ember_meta__: Meta, parentView: Class, HAS_BLOCK [id=__ember1449505261281400801945202]: true, _targetObject: Class…} 
> undefined 

上這是爲什麼不觸發事件任何線索?也許是因爲指南的例子只是與組件工作,我正在使用控制器?

回答

0

只需使用componentInstance.sendAction請:

validateAndSubmit() { 
    console.log('validate'); 
    this.sendAction('submit'); 
} 

Working demo.

+0

非常感謝!它可以無縫地工作,但是我不明白爲什麼我的代碼不能正常工作,如果這是指南所說的。你能簡單解釋一下嗎?再次感謝。 – Lowlo

+0

你需要把你的動作放在正確的控制器中。我更新了我的演示 - https://ember-twiddle.com/273fa15701dec2504162 - 和'this.get('submit')'記錄正確。你自己看。這種方法很好。 –

相關問題