.gjs 文件覆盖 - 不可能?

您好,

最近的一次更新导致我们的一个组件出现故障。该组件以前是扩展行内引用按钮,即 quote-button.hbs。该文件已不存在 - 相反,所有代码都已移至 gjs 文件 post-text-selection-toolbar.gjs,如果我尝试以“旧方式”覆盖它,浏览器会抱怨并显示以下消息。

component-templates.js:62 [discourse/theme-48/discourse/templates/components/post-text-selection-toolbar] post-text-selection-toolbar 是使用 gjs 编写的,其模板无法被覆盖。正在忽略覆盖。

这是否意味着 Discourse 中的这部分 UI 只能通过其中定义的 PluginOutlets 来定位?

  <PluginOutlet
                @name="quote-share-buttons-after"
                @connectorTagName="span"
              />

 <PluginOutlet @name="quote-button-after" @connectorTagName="div" />

如果我需要对按钮的状态以及新增的按钮有更多的控制,该怎么办?我觉得这限制了功能。

有人知道如何处理这种情况吗?

3 个赞

你好 :waving_hand:

我认为现在使用 api.renderInOutlet 可以做到这一点?

5 个赞

您好 @Sören_Geier - 这是正确的,您需要使用插件插槽来更改 UI 的这部分。插件插槽是扩展事物的更强大的方法,并且在 Discourse 核心更新中会更可靠。

如果现有的插件插槽不适用于您的用例,请告知我们,我们将很乐意考虑引入新的插件插槽。

在这种情况下,您可能会对 DEV: Add outlet and API for adding/controlling post selection buttons by keegangeorge · Pull Request #23782 · discourse/discourse · GitHub 中的提案感兴趣。该提案引入了一个“包装器插件插槽”,它将允许主题/插件在需要时完全替换核心实现。

是的,这是将内容渲染到插件插槽的另一种方法。但它更像是一种代码风格——与 /connectors/... 文件相比,它实际上并没有引入任何新功能。

7 个赞