jotamartos
(Juan Jose Martos)
1
大家好,
我正在尝试修改 Discourse 2.6.1 中“新建主题”按钮的默认行为。我编写了一个自定义插件,通过修改默认的 Ember 操作来运行我的函数。在之前的 Discourse 版本(1.8.0)中,这能正常工作,但我无法在新版本中找到实现同样效果的方法。代码如下:
const NavigationDefaultController = require('discourse/controllers/navigation/default').default;
const SearchResultsDefaultController = require('discourse/controllers/full-page-search').default;
...
function myFunction() {
CODE HERE
}
...
NavigationDefaultController.reopen({
actions: {
createTopic: myFunction,
},
});
SearchResultsDefaultController.reopen({
actions: {
createTopic: myFunction,
},
});
第一个控制器定义了主站点的操作(在新版本中不起作用),而第二个控制器定义了在执行应用内搜索时运行的操作(在新版本中也能正常工作)。
我注意到“新建主题”按钮是通过 createTopic 和 clickCreateTopicButton 操作创建的,但它们在主站点上均不生效。我是否需要修改其他操作,或者需要使用不同的控制器?
谢谢。
1 个赞
pfaffman
(Jay Pfaffman)
3
我理解你的感受。
如何在主题中添加自定义字段 是我能想到的最佳方案。虽然它与你的问题关联不大,但文档非常详尽。
1 个赞
jotamartos
(Juan Jose Martos)
4
你好 @pfaffman,
感谢你的建议。不过,如果我没记错的话,那个插件允许你在主题中添加自定义字段,而我想做的是在点击“新建主题”按钮时运行自己的 JavaScript 代码。我认为我的问题主要涉及应该使用 Discourse 的哪个控制器、要运行的函数名称以及如何覆盖该函数。能否请你指点一下?
谢谢
pfaffman
(Jay Pfaffman)
5
哎呀,真糟糕。抱歉。我原以为里面有一些 JavaScript 代码(例如在 discourse-topic-custom-fields/assets/javascripts/discourse 中),或许能有助于了解如何将这些功能连接起来。我对前端技术还不太熟练,所以恐怕这已经是我能给出的最好建议了。
jotamartos
(Juan Jose Martos)
6
感谢你的帮助 @pfaffman。我终于找到了需要修改的控制器和操作,该插件在 Discourse 2.6.x 中又正常运行了。
const NavigationDefaultController = require('discourse/components/d-navigation').default;
const SearchResultsDefaultController = require('discourse/controllers/full-page-search').default;
...
function myFunction() {
在此处编写代码
}
...
NavigationDefaultController.reopen({
actions: {
clickCreateTopicButton: myFunction,
},
});
SearchResultsDefaultController.reopen({
actions: {
createTopic: myFunction,
},
});
注意:这是插件代码,位于 yourPlugin/assets/javascripts/discourse/initializers 目录下。
一旦我点击“新建主题”按钮,我的 JavaScript 代码就会执行,用户将看到我为论坛构建的菜单。
3 个赞
pfaffman
(Jay Pfaffman)
7
太好了!真高兴你收到了!不过,东西该放在哪里、该取什么名字,对我来说仍然有些神秘,尽管我已经在逐渐进步了。