Ember 中组件之间的通信

Communication between components in Ember

我有一个包含两个组件的模板,一个是文件上传组件,一个是显示上传进度的进度条。

{{file-upload}}
{{ember-progress-bar progress=progress}}

我正在使用 ember-uploader。我正在尝试像这样设置进度条的进度:

uploader.on('progress', e => {
    // send progress to other component
});

我了解到您应该使用动作在组件之间进行通信,但我只能在上传组件的 filesDidChange 函数中访问该进度值,所以我认为我无法在动作中发送它.将此进度值发送到进度条组件的最佳方式是什么?

这是我使用上下文组件为没有父子关系的组件启用组件间通信的地方(一个不在其模板中呈现另一个)。

请看下面twiddle我已经为你准备好了说明我的意思。我创建了模拟 ember-progress-barfile-upload 组件。当然,我没有使用 filesDidChange 函数来模拟 file-upload 组件,而是使用 click 函数,我决定将 screenXscreenY 值发送到鼠标单击事件以 ember-progress-bar 组件作为进度。

ember-progress-bar 用作 application.hbs 中的上下文组件;其中 ember-progress-bar 产生 progressUpdated 动作,其模板内有 {{yield (hash progressUpdated=(action 'progressUpdated'))}}。在 application.hbs 内(其中 ember-progress-bar 以块形式使用);这个产生的动作被检索并作为 onclick 动作传递给 file-upload 组件。

我不知道这是否对你有帮助;但这是我大量用于组件间通信的技术。由于上下文组件(从组件产生并在将要使用它的地方以块形式使用组件),我再次依赖动作。