我认为这可能是 Discourse 的一个 bug,但不确定。也许是我自己操作不当。
我有一个插件,它向 user-card-post-names 连接器添加信息。
Handlebars:
Javascript:
import dopuslib from "discourse/plugins/discourse-directoryopus/lib/directoryopus-link-lib";
export default {
setupComponent(args, component) {
dopuslib.setupUserProfileComponent(component.user, component, true, this.currentUser);
}
}
这又会调用下面的 Javascript 来完成大部分工作:
export default {
setupUserProfileComponent(userModel, component, small, currentUser) {
const currentAdmin = !!(currentUser && currentUser.get("admin"));
// const viewingAdmin = !!(userModel.get("admin"));
const viewingStaff = !!(userModel.get("staff"));
const viewingSelf = !!(currentUser && (userModel.get("username") === currentUser.get("username")));
const canLinkUser = viewingSelf || currentAdmin;
// component.set("opusViewingSelf", viewingSelf);
component.set("opusCanLinkUser", canLinkUser);
var version = userModel.custom_fields && userModel.custom_fields["directoryopus_link_version"];
var edition = userModel.custom_fields && userModel.custom_fields["directoryopus_link_edition"];
// TODO: Work out how on earth this works.
// userModel.addObserver("custom_fields", () => { alert('Observer firing'); debugger; });
var opusLinkClass = null;
var opusLinkIcon = null;
This file has been truncated. show original
问题详情:
在前面的 JS 代码中,有这两行:
var version = userModel.custom_fields && userModel.custom_fields["directoryopus_link_version"];
var edition = userModel.custom_fields && userModel.custom_fields["directoryopus_link_edition"];
然后它会进行一个测试 if (version || edition) { ... } 并根据结果生成一些字符串(opusLinkClass、opusLinkIcon、opusLinkText),然后将其存储:
component.set("opusLinkClass", opusLinkClass);
component.set("opusLinkIcon", opusLinkIcon);
component.set("opusLinkText", opusLinkText);
这些字符串随后在本文开头的 handlebars 文件中使用。
浏览器日志窗口中从未出现任何错误或警告,但有时会出现问题。
我正在使用一个同时设置了 custom_fields 的帐户进行测试,因此 if (version || edition) 测试应该始终进入第一个分支,而不是下面的 else if (!viewingStaff)。
但有时它会进入第二个分支,这意味着 version 和 edition 未被设置。
这通常不会发生,这就是为什么我认为这可能是 Discourse 的一个 bug。
这似乎只会在我创建新帖子然后回复它,或者编辑我刚做的回复时才会发生。这就像在某些情况下,由于某个地方的竞态条件,连接器运行时 userModel 对象没有正确初始化?
这似乎只会在每个帖子里发生 一次 。如果我刷新页面,一切都会恢复正常,并且在该帖子里会一直正常。 (至少据我所知。它似乎是半随机的,所以有可能我还没有在同一个帖子里再次看到它发生。)
感谢您的时间和任何建议。