duranmla
(Alexis Duran)
1
大家好,
我正在开发一个主题,用于自定义 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
duranmla
(Alexis Duran)
3
当我创建这个主题时,我的本地 Discourse 版本是 1 月 17 日的(如果我没记错的话)。也就是说,我在该版本上遇到了问题,即使更新到最新版本并将 raw.hbs 重命名为 hbr 后,问题依然存在。
目前我通过自定义 javascripts/discourse/templates/components/topic-list-item.hbs 文件解决了问题,但理想情况下,raw 模板的行为应与其他模板一致(在替换和自定义方面)。
@awesomerobot 如果你切换到 hbr 更改之前的那个提交,它还能正常工作吗?
啊,是的,谢谢提供日期 @duranmla……这确实是一个有点久远的问题 @markvanlan,我正在排查中。
好的,我在定位问题时遇到了一些小麻烦,因为回退后,我需要先移除再重新应用自定义设置才能复现该问题。
我认为问题实际上出在 @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>
在该提交之前,一切正常;但一旦应用该提交并重新应用自定义设置后,模板就会被忽略。
duranmla
(Alexis Duran)
8
也许我终究是搞错了,我还以为那件事比这更早呢。无论如何,我会继续关注这个帖子。感谢 @awesomerobot 迅速帮忙排查。
如果拉取最新版本,现在已有修复:
Mark 将开展额外工作,以查明为何测试在此问题存在的情况下仍显示通过。
duranmla
(Alexis Duran)
10
尽管如此,我已经更新了,但错误仍然存在在使用主题项目结构时(这可能是中大型项目最常用的结构)。我在此附上我展示该错误的视频:https://www.loom.com/share/d3f437347c8f4d5aa4dd1c7ce08e1bf9
附注:我会暂时保留该视频,以防它有助于他人理解问题并复现。几周后我将删除该视频 
注意:我也尝试将文件名改回 topic-list-item.raw.hbs 而不是 topic-list-item.hbr,但问题依旧。
对我来说,使用 javascripts 目录(无论是旧扩展名还是新扩展名)都能正常工作。
昨晚我遇到的一个问题是,您可能需要编辑并保存文件,或者删除文件后重新添加(模板在保存时编译,因此您可能暂时处于存在错误的状态)。