无法在移动设备上替换 topic-list-item.raw.hbs / topic-list-item.hbr

大家好,

我正在开发一个主题,用于自定义 Discourse 默认配置的多个方面。为此,我需要自定义 topic-list-item 组件,这看起来相对简单。我在主题中添加了文件 javascripts/discourse/templates/components/topic-list-item.hbs,并可以在其中编写代码。然而,问题也随之而来。

该组件模板中有一个名为 renderTopicListItem 的方法,它设置了一个属性 topicListItemContents,这是默认渲染的内容。请查看:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/topic-list-item.hbs

第一个问题是:为什么? 为什么我们需要这样做?为什么不直接使用常规的 Handlebars 代码?

为了不过多干扰核心代码,我决定保持 topic-list-item 不变,并在我的主题中替换 topic-list-item.raw.hbs,这样确实可以正常工作。

然而,我原本期望在主题中添加类似 javascripts/discourse/templates/mobile/list/topic-list-item.raw.hbs 的文件能够替换移动端视图,但事实并非如此。

findRawTemplate 方法仍然返回 Discourse 默认的移动端模板,其中包含:

即使在我的本地 Discourse 项目中手动编辑,也无法让移动端版本随更改更新。

希望上述解释清晰明了,如果有人对此有所了解,那就太好了。目前这看起来确实有些问题,如果确实如此,我们或许可以修复它(如果我能更清楚地理解发生了什么,我可以尝试修复)。

同时,我会继续自行寻找答案,并随时更新进展。以下是我在本地环境中看到的小动图:

http://g.recordit.co/AtOJlltJ8o

更新: 我还将 raw 文件扩展名更新为 .hbr,因为最近的提交更改了文件格式,但依然无法使其正常工作。

我刚刚测试了一下,也遇到了同样的问题……我完全无法覆盖那个模板。这似乎是在过去一两天内发生的。这是否与切换到 hbr 有关?@markvanlan

当我创建这个主题时,我的本地 Discourse 版本是 1 月 17 日的(如果我没记错的话)。也就是说,我在该版本上遇到了问题,即使更新到最新版本并将 raw.hbs 重命名为 hbr 后,问题依然存在。

目前我通过自定义 javascripts/discourse/templates/components/topic-list-item.hbs 文件解决了问题,但理想情况下,raw 模板的行为应与其他模板一致(在替换和自定义方面)。

@awesomerobot 如果你切换到 hbr 更改之前的那个提交,它还能正常工作吗?

啊,是的,谢谢提供日期 @duranmla……这确实是一个有点久远的问题 @markvanlan,我正在排查中。

供参考,尚未发现此问题影响 https://meta.discourse.org/t/topic-list-previews/101646,该链接确实覆盖了移动端的 Topic List Item 原始模板。相关代码位于 https://github.com/paviliondev/discourse-topic-previews/tree/master/assets/javascripts/discourse/templates/mobile/list。不过,目前仅在测试通过的环境中进行过验证。

好的,我在定位问题时遇到了一些小麻烦,因为回退后,我需要先移除再重新应用自定义设置才能复现该问题。

我认为问题实际上出在 @markvanlan 的 hbr 提交上(https://github.com/discourse/discourse/commit/3e897749084faeb29eb9a524d3f3b3f1d46a8738),之前犹豫不决,抱歉。

为了测试,我通过管理面板的自定义部分,将以下内容添加到了当前主题的 <head> 中:

<script type='text/x-handlebars' data-template-name='mobile/list/topic-list-item.raw'>
  test
</script>

在该提交之前,一切正常;但一旦应用该提交并重新应用自定义设置后,模板就会被忽略。

也许我终究是搞错了,我还以为那件事比这更早呢。无论如何,我会继续关注这个帖子。感谢 @awesomerobot 迅速帮忙排查。

如果拉取最新版本,现在已有修复:

Mark 将开展额外工作,以查明为何测试在此问题存在的情况下仍显示通过。

尽管如此,我已经更新了,但错误仍然存在在使用主题项目结构时(这可能是中大型项目最常用的结构)。我在此附上我展示该错误的视频:https://www.loom.com/share/d3f437347c8f4d5aa4dd1c7ce08e1bf9

附注:我会暂时保留该视频,以防它有助于他人理解问题并复现。几周后我将删除该视频 :grimacing:

注意:我也尝试将文件名改回 topic-list-item.raw.hbs 而不是 topic-list-item.hbr,但问题依旧。

对我来说,使用 javascripts 目录(无论是旧扩展名还是新扩展名)都能正常工作。

昨晚我遇到的一个问题是,您可能需要编辑并保存文件,或者删除文件后重新添加(模板在保存时编译,因此您可能暂时处于存在错误的状态)。