如何将组件的操作添加到插件插槽中?

我一直在尝试在插件插槽 (plugin-outlet) 中引用现有组件,但一直收到错误。主要问题似乎是与该组件关联的操作。是否有正确的方法来引用插件插槽中另一个组件的操作?

我本以为在插件插槽中,只需引用组件(例如 {{component-name action=(action \"doSomething\")...}})就能引入该组件操作的所有相关代码。但似乎并非如此——因为我一直收到各种错误,比如某些东西未定义、定义不当以及其他暗示操作的 JavaScript 未正确引入插件插槽的问题。


例如:

如果在模板中有对 composer-action-title 组件的以下引用,如下所示:
composer.hbs:

 {{composer-action-title
       model=model
        openComposer=(action "openComposer")
        closeComposer=(action "closeComposer")
        canWhisper=canWhisper
        tabindex=8
  }}

我想添加一个插件插槽,该插件插槽——在那个插件插槽中——具有相同的代码,如下所示:

connectors/cool-outlet/cool-outlet.hbs:

 {{composer-action-title
       model=model
        openComposer=(action "openComposer")
        closeComposer=(action "closeComposer")
        canWhisper=canWhisper
        tabindex=8
  }}

我需要做什么才能让我的 cool-outlet 插件插槽能够成功引用 composer-action-title 组件,包括“openComposer”和“closeComposer”操作?

我已经掌握了基本要点——当然,如果其他人有建议,我非常乐意听取。

要将操作和其他参数传递给插件出口,您可以像引用组件一样将它们添加到插件出口引用中。

但请注意,您传递的参数是否正确——即,正确的变量引用。

使用我的例子:这是模板 composer.hbs 中出现的组件引用:

{{composer-action-title
       model=model
       openComposer=(action "openComposer")
       closeComposer=(action "closeComposer")
       canWhisper=canWhisper
       tabindex=8
  }}

如果您想用插件出口的引用替换此引用(鉴于随着 Discourse 的变化维护内容的难度增加,在编辑模板文件时要格外小心),并且您希望插件出口本身引用 composer-action-title 组件,您可以将以下内容放入 composer.hbs

{{plugin-outlet name="cool-outlet" args=(hash
       model=model
       openComposer=(action "openComposer")
       closeComposer=(action "closeComposer")
       canWhisper=canWhisper
       tabindex=8
    )
}}

然后在 connectors/cool-outlet/cool-outlet.hbs 中,以下内容应该可以引用 composer-action-title 组件:

{{composer-action-title
       model=model
       openComposer=openComposer
       closeComposer=closeComposer
       canWhisper=canWhisper
       tabindex=8
  }}

请注意这里的变量,它们是在 composer.hbs 文件中设置的变量。