“组件是使用 gjs 编写的”——但事实并非如此

在稳定版 3.4.1 上。

我的插件中有这个文件
/assets/javascripts/discourse/controllers/user-feedback.js

然后
/assets/javascripts/discourse/templates/user-feedback.hbs 包含

{{feedback-stream stream=this.model}}

然后是这些文件:

/assets/javascripts/discourse/components/feedback-stream.js
/assets/javascripts/discourse/templates/components/feedback-stream.hbs

这是我在浏览器控制台中看到的错误。


/discourse/templates/components/feedback-stream] feedback-stream 是使用 gjs 编写的,其模板无法被覆盖。正在忽略覆盖。有关模板覆盖未来的更多信息,请参阅 https://meta.discourse.org/t/247487

但是,正如您所见,它不是使用 gjs 编写的。

现在我决定暂时忽略此错误,并继续现代化插件。一旦我将模板放在一起(mv templates/components/* components),错误就消失了。但模板仍然被忽略。

2 个赞

好的,这些零散的信息似乎开始联系起来了。

该组件是

export default class FeedbackStream extends UserStream {

而 UserStream 是使用 gjs 编写的。

撇开错误的错误消息不谈,我该如何对其进行现代化改造并使其恢复工作?

1 个赞

您的更改的目的是什么?以便我们了解上下文。

我认为使用 gjs,您只能依赖插件插槽。 :thinking:

我当前更改的目的是让插件在最新的稳定版本上恢复工作 :slight_smile:

此插件特定部分的目的,是在用户个人资料页面上显示反馈,同时大量重用现有组件。

如果您为 FeedbackStream 使用 gjs,我认为它应该可以工作。所以它会是这样的:

export default class FeedbackStream extends UserStream {
  <template>
    Your custom template here
  </template>
}

我认为在同一个组件继承链中混合使用 hbs/gjs 可能效果不佳。

3 个赞

顺便说一句 @Arkshine 我看到了你的 :exploding_head: - 所以我在这里澄清一下。模板覆盖已被弃用,无论原始创作格式如何。我们将在未来几个月内完全移除它们。对于那些情况,你 100% 正确,插件出口是解决方案。

但是 @RGJ 在这里所做的不是模板覆盖,而是使用了 Ember 的组件继承系统。而不是这样做

class Foo extends Component

你可以这样做

class Foo extends SomeOtherComponent

在这种情况下,你的组件将继承 SomeOtherComponent 的模板,或者你可以选择自己替换模板。你的模板替换仅适用于 Foo,不会影响父级 SomeOtherComponent

不过,这种继承是一种很少使用的功能。我们倾向于使用“组合”,即在模板中将组件互相包装。(例如,DModal 就是这样使用的)。

5 个赞

哦,我明白了;谢谢澄清!我之前没有看到这里的继承关系。说得通。

3 个赞

谢谢你David的快速帮助和清晰的解释!

4 个赞

该话题在最后回复后30天自动关闭。不再允许新回复。