在Ember.js中的嵌套组件中触发操作

在Ember.js中的嵌套组件中触发操作,ember.js,Ember.js,我有一个组件——本质上是一个表单——显示一组项目的可编辑价格。此表单中的每一行也是一个组件,因此存在嵌套关系(父组件和子组件) 此表单底部有一个按钮,用于取消用户对表单所做的任何更改,这意味着它需要影响所有子组件。理想情况下,我希望从Cancel按钮触发一个操作,并让子组件对此做出反应 我知道这与Ember的“数据下降/行动上升”方法论背道而驰,但我不确定还有什么其他方法可以做到这一点 有什么方法可以做到这一点吗?按照“数据向下,操作向上”的方法,您将不得不这样做 父组件: App.Parent

我有一个组件——本质上是一个表单——显示一组项目的可编辑价格。此表单中的每一行也是一个组件,因此存在嵌套关系(父组件和子组件)

此表单底部有一个按钮,用于取消用户对表单所做的任何更改,这意味着它需要影响所有子组件。理想情况下,我希望从Cancel按钮触发一个操作,并让子组件对此做出反应

我知道这与Ember的“数据下降/行动上升”方法论背道而驰,但我不确定还有什么其他方法可以做到这一点


有什么方法可以做到这一点吗?

按照“数据向下,操作向上”的方法,您将不得不这样做

父组件:

App.ParentComponent = Ember.Component.extend({
    isCancelled: false,
    actions: {
        cancel: function() {
            this.set('isCancelled', true);
        }
    }
});
App.ChildComponent = Ember.Component.extend({
    isCancelled: false,
    wasCancelled: function() {
        if (this.get('isCancelled')) {
            // Cancelled logic here
        }
    }.observes('isCancelled')
});
父模板:

{{child-component isCancelled=isCancelled}}
<button {{action 'cancel'}}>Cancel</button>

我不确定按下“取消”按钮时,您希望子组件发生什么,但您可能可以使用计算属性而不是观察者(我认为这有点干净)。

如果嵌套组件上的操作转到父控制器并更改属性或模型,这些更改将反映在作为参数接收该数据集的任何组件中。