Javascript EmberJS嵌套组件事件

Javascript EmberJS嵌套组件事件,javascript,ember.js,Javascript,Ember.js,我使用的是EmberJS CLI,我正试图了解组件。然而,我不太明白他们之间最好的沟通方式是什么。我正在尝试制作一个带有侧菜单和画布的简单图形编辑器。我有一个“图形编辑器”组件,其中包含作为子级的“侧菜单”和“编辑器画布”组件。如果我在“侧菜单”组件上选择“插入文本”之类的选项,我如何告诉“编辑器画布”添加一些文本 我听说过行动起来,数据下降。那么,我是否应该将侧菜单模型传递给画布进行观察(我可能还有一个菜单栏,它可以告诉画布以后也要做一些事情,因此我也必须以某种方式进行观察)?因此,每当侧菜单

我使用的是EmberJS CLI,我正试图了解组件。然而,我不太明白他们之间最好的沟通方式是什么。我正在尝试制作一个带有侧菜单和画布的简单图形编辑器。我有一个“图形编辑器”组件,其中包含作为子级的“侧菜单”和“编辑器画布”组件。如果我在“侧菜单”组件上选择“插入文本”之类的选项,我如何告诉“编辑器画布”添加一些文本

我听说过行动起来,数据下降。那么,我是否应该将侧菜单模型传递给画布进行观察(我可能还有一个菜单栏,它可以告诉画布以后也要做一些事情,因此我也必须以某种方式进行观察)?因此,每当侧菜单上出现一个动作时,它的模型就会更新,画布就可以观察到这一点,并根据对它的更改采取行动

或者,是否有一种干净的方法将侧菜单操作冒泡到父编辑器组件,然后捕获它并调用画布组件上的操作

或者我应该使用视图和控制器(即使EmberJS似乎在引导人们远离它们)而不是组件。然后图形编辑器的控制器可以捕获一个动作,并使用controllerFor将其传递到编辑器画布上

或者我应该使用Ember.Evented吗

在我的主应用程序模板中,我有:

{{graphics-editor model=model}}
“我的图形编辑器”(graphics editor.hbs)组件看起来像:

<div class="ui-layout-north nopadding">
  {{file-menu menuItems=model.fileMenu.menuItems}}
</div>
<div class="ui-layout-west">
  {{side-menu addLabel='addLabel'}}
</div>
<div class="ui-layout-center nopadding emptyBackground">
  {{editor-canvas canvasModel=model.canvas}}
</div>
<div class="ui-layout-south nopadding">
  {{editor-footer}}
</div>

{{file menu menuItems=model.fileMenu.menuItems}
{{side menu addLabel='addLabel'}}
{{editor canvas canvasModel=model.canvas}
{{编辑器页脚}}

保留组件。在这种情况下,兄弟组件之间的消息传递相当多(侧菜单和画布),我认为可以使用
Ember.events

您可以将事件总线服务(
Ember.service.extend(Ember.Evented)
)注入到发布/订阅机制的组件中。例如,在侧菜单组件中:

eventBus: Ember.inject.service(),

actions: {
    insertText: function(text) {
      this.get('eventBus').trigger('insertText', text);
    }
    ...
}
画布组件将订阅到的


我最近写了一篇关于这个主题的文章:

保留组件。在这种情况下,兄弟组件之间的消息传递相当多(侧菜单和画布),我认为可以使用
Ember.events

您可以将事件总线服务(
Ember.service.extend(Ember.Evented)
)注入到发布/订阅机制的组件中。例如,在侧菜单组件中:

eventBus: Ember.inject.service(),

actions: {
    insertText: function(text) {
      this.get('eventBus').trigger('insertText', text);
    }
    ...
}
画布组件将订阅到的


我最近写了一篇关于这个主题的文章:

是的。我昨天找到了你的博客,决定使用Ember.Evented.Yes。我昨天找到了你的博客,决定使用Ember.Evented。