Кажется, у вас есть некоторые опечатки. Например, parentAction не передается дочернему компоненту. Но если я понял, чего ты хочешь добиться правильно - это выполнимо, однако я даже не представляю, зачем тебе это нужно.
Вы можете поиграть с моим примером здесь . Выбор находится в дочернем компоненте, а кнопка находится в родительском компоненте. Когда вы выбираете что-то в select - дочерний компонент отправляет одну из двух функций родительскому компоненту. А когда вы нажимаете кнопку - родительский компонент вызывает эту функцию.
Код:
//child-component.js
import Ember from 'ember';
export default Ember.Component.extend({
line1: "Say Hi!",
line2: "Say Yeah!",
changeAction(newAction) {
switch (newAction) {
case "1":
this.onActionChange(this.action1);
break;
case "2":
this.onActionChange(this.action2);
break;
default:
this.onActionChange(undefined);
break;
}
},
action1: Ember.computed(function(){
const that = this;
return function() {
alert(that.line1);
}
}),
action2: Ember.computed(function(){
const that = this;
return function() {
alert(that.line2);
}
})
});
//child-component.hbs
<select onchange={{action changeAction value="target.value"}}>
<option>Choose something</option>
<option value="1">Action 1</option>
<option value="2">Action 2</option>
</select>
//parent-component.js
import Ember from 'ember';
export default Ember.Component.extend({
childishAction() {
if (typeof this.childAction === 'function') {
this.childAction();
}
}
});
//parent-component.hbs
{{child-component onActionChange=(action (mut childAction))}}
<div><button disabled={{unless childAction true false}} onclick={{action childishAction}}>Let's do it!</button></div>
Что здесь происходит - вы не можете передать action
помощнику что-то, что не определено, когда ember отображает шаблон. Поэтому вам нужно сохранить действие, которое дочерний компонент отправляет в некоторую переменную, и вызвать его, используя некоторое промежуточное действие родительского компонента.
В моем примере функция, возвращаемая из дочернего компонента, сохраняется в свойстве childAction родительского компонента, и childishAction
родительского компонента вызывает его.
Надеюсь, это поможет. Но вы, вероятно, пытаетесь решить какую-то проблему не правильно.