Ember.js 如何在子组件中触发动作?

Ember.js 如何在子组件中触发动作?,ember.js,components,action,Ember.js,Components,Action,我知道数据向下/操作向上的概念,但我面临的情况是,我不知道如何使用DDAU。我在不同的论坛和博客上搜索了如何做到这一点,但它不符合我的要求 我有一个带有两个组件的控制器。 在第一个组件上,我有一个带有按钮的标题。 在第二部分,我有一个表单 单击按钮时,控制器会触发并捕获一个动作,但是如何通知第二个组件“单击”第一个组件上的按钮 一个简单的解决方案是将第一个组件包含在第二个组件中,但我不能这样做,因为每个组件都在许多不同的情况下使用。您可以将foo属性从控制器传递到这两个组件,并将第一个组件传递到

我知道数据向下/操作向上的概念,但我面临的情况是,我不知道如何使用DDAU。我在不同的论坛和博客上搜索了如何做到这一点,但它不符合我的要求

我有一个带有两个组件的控制器。 在第一个组件上,我有一个带有按钮的标题。 在第二部分,我有一个表单

单击按钮时,控制器会触发并捕获一个动作,但是如何通知第二个组件“单击”第一个组件上的按钮


一个简单的解决方案是将第一个组件包含在第二个组件中,但我不能这样做,因为每个组件都在许多不同的情况下使用。

您可以将
foo
属性从控制器传递到这两个组件,并将第一个组件传递到控制器以更改
foo
。现在,此同级组件也将收到通知,您可以使用同级组件中的挂钩来响应更改。

您可以将服务用作总线

在第二个组件上注册一个事件,并从第一个组件触发该事件

我把它拿给你看

如果不想使用服务,可以使用父子模型


请看一看

你不会这样做的!这与DDAU模式背道而驰。为什么第二个组件甚至需要知道该操作?在控制器中编写该代码。我认为我们这里有一个问题。如果组件不能做组件应该做的事情,为什么不使用组件,并将这部分行为移动到控制器中,以符合DDAU。我的组件需要了解该操作,因为该操作必须触发更改(例如,从外部ajax查询刷新、保存等)。这完全是我方部件的责任,不应委托给控制方。另外,我不想在使用此组件的每个控制器上复制控制器的代码。您的第一个示例,AJAX请求,正是您可能不应该在组件中执行的操作。如果您通常同时使用此表单组件和burton组件,那么最好创建包含其他两个组件的第三个组件。您的代码可以放在这个周围的组件中。也许你可以加入slack频道进一步讨论这个问题。我不明白为什么它应该出现在第三个组件上。这意味着每次使用该组件时,我都必须创建一个新组件来集成/复制最初放置在第二个组件中的行为。IMHO,你的建议是一个符合DDAU的解决方案,但它与组件的基本概念(隔离、责任、代码重复减少等)不一致。不,我没有。无论是否在使用此组件的所有时间都使用相同的代码。如果您总是使用相同的代码,并且只想替换按钮,那么包装器组件可以节省您的时间。如果情况变得更复杂,就来救援吧。如果某个操作未在组件内部触发,则不应在该组件中处理该操作。如果你能更详细地描述你的问题,我们可能会更好地帮助你。我认为,关于这一点,使用数据更改来通知事件,但我无法决定这样做,我认为有更好的方法来做到这一点…正如Lux提到的,如果可能,最好远离这种方法。如果你能在你的问题中解释用例,你可能会得到更好的解决方案。是的,事实上,我可以用这个。我希望有一种比总线更“简单”的方法来通知两个兄弟组件。使用服务从父控制器调用子操作。我需要它在子组件中封装一些代码。谢谢:D