有没有办法重新打开一个类并重写某个函数?
我需要重写的函数是位于 javascripts/discourse/helpers/category-link.js.es6 第 15 行的 function categoryStripe(color, classes) {}。
有没有办法重新打开一个类并重写某个函数?
我需要重写的函数是位于 javascripts/discourse/helpers/category-link.js.es6 第 15 行的 function categoryStripe(color, classes) {}。
我认为是的。你看过 Developing Discourse Themes & Theme Components 吗
实现你的需求有多种方法。你覆盖 categoryStripe 的目的是什么?
我想将其从:
function categoryStripe(color, classes) {
var style = color ? "style='background-color: #" + color + ";'" : "";
return "<span class='" + classes + "' " + style + "></span>";
}
改为:
function categoryStripe(color, classes) {
var style = color ? "style='border: 1px solid #" + color + ";'" : "";
return "<span class='" + "my-class" + classes + "' " + style + "></span>";
}
即将背景色改为边框,并添加一个类。
Justin,实现这一点的最佳方法是什么?
我读过那篇文章,但据我所知,它只涵盖了覆盖模板(和小部件)的功能,似乎没有提到辅助函数,是这样吗?
你最初的帖子中并没有明确说明这些。我想你现在会得到一个有价值的回答,我也很期待看到!
您是否考虑过通过 JavaScript 添加该类,或在样式表中使用 !important 覆盖内联样式?虽然您可以尝试覆盖这种方法,但它最终会失效。通过 JS 将内容添加到 DOM 可能是最稳定的方案。
前几天我想弄明白的正是这一点。我想为所有主题中的帖子(但排除主题/原始帖子)添加一个自定义类。我希望能够根据用户组和帖子创建时间(topic created_at)来开启或关闭这个自定义类,但我认为在弄清楚如何为帖子添加自定义类之后,我就能解决这个问题。我没有找到完全符合我需求的示例,但在找到示例之前,其他一些事情可能分散了我的注意力。
我认为那样行不通,因为我需要从分类设置中获取颜色——因此每个分类的边框颜色会有所不同。(我已更新了我上面的 帖子 以反映这一点。)
除非可以通过 JavaScript 获取(或添加到 DOM)?(如果可以,能否请您提供一个示例?)
我需要深入研究具体细节,才能确定仅通过 JS 选择器实现您想要的功能是否可行(可惜我现在没时间)。
您也可以通过 JS 修改内联样式:Setting CSS Styles using JavaScript | KIRUPA
谢谢 Justin,我会看一下。
或者有没有办法像覆盖模板/组件/小部件等那样覆盖辅助函数(https://github.com/discourse/discourse/blob/b25d9e96c1414bf78b44221da4d385675843991e/app/assets/javascripts/discourse/helpers/category-link.js.es6)?
如果需要的话,我不介意随时关注该文件的未来变更 ![]()
您可以尝试在您的主题中创建文件 javascripts/discourse/helpers/category-link.js.es6,并在其中添加该函数的修改版本。我很久没有深入处理这类问题了,所以无法保证这是否有效!![]()
没错,这样应该没问题。
谢谢两位!
最后一个问题(希望如此!)我该如何在那里创建文件呢?![]()
在插件中,只需创建文件夹并复制粘贴即可,非常简单!
啊!!!谢谢罗伯特!
我现在得先出去一下,但一回来就试试。![]()
谢谢罗伯特!
不过还是不行 ![]()
我做了以下操作:
rails g plugin CategoryAlternative
然后放入以下内容:
在一个我必须创建的 helpers 文件夹中:
接着:
rm -rf tmp
rails s
它在 AdminCP 中显示了,但实际页面上没有反映任何更改(如果我编辑非插件版本的文件并使用完全相同的修改,更改就会显示)。
我是不是漏掉了什么?我还需要配置其他内容吗?
你收到任何 JavaScript 控制台错误吗?
你包含的是_整个文件_吗?
注意:我没有使用插件生成器,而是手动创建了所有内容。
我在撰写时并没有包含(因为我以为 Justin 的意思只是包含那个函数),不过,虽然包含整个文件后它确实能工作了,但效果与我直接编辑文件时并不相同。
例如,它在 latest 页面上可以工作,但在 所有分类 下拉菜单中却无法工作……而当我直接编辑文件时,后者是可以正常工作的!
所以我最终通过一些杂乱的 CSS 来实现所需的更改
,并且不得不做出一些妥协——这肯定比完全无法实现要好,但理想情况下,我希望能像编辑模板那样简单地更改分类样式
。
我也想这样做。
这是我试图在主题组件中覆盖的文件路径:
custom_loader\javascripts\discourse\helpers\loading-spinner.js
但 JS 文件未被加载。我遗漏了什么?