多用户选择字段插件是否失效?

这可能受到了最近 Discourse 更新(当前版本为 2.5.0.beta2)的影响。
我有一个 多选下拉字段,此前已设置并正常工作,且设置为注册后可编辑等。

但现在对于现有用户,虽然该字段的内容会显示在其用户个人资料页面中,但在用户偏好设置页面中,该字段并未与其他可编辑的自定义用户字段一同列出。
换句话说,用户或管理员已无法再更改该字段。

此外,对于新注册用户,虽然多选字段可见,但下拉选项均无法显示(仅看到一个细长的空白蓝色矩形)——由于该字段被设置为必填项,注册流程无法继续。

这是一个已知问题吗?是否已确认是由 Discourse 更新导致的?是否已知与之兼容的最新 Discourse 版本是什么?是否有合理的回退方法?

我已在 GitHub 上提交了问题报告,但注意到该插件已有一两年没有开发活动,因此不太乐观地认为能从该方向获得解决方案。是否还有其他可行的方法在 Discourse 中实现用户字段的多选下拉功能?

FYI 过去几个月内,核心组件的 Select Kit 已大幅升级至 2.0 版本。这影响了多个插件,尤其是此类控件。如果该插件自那时起未得到维护,可能确实无法正常工作。

建议您在此处联系开发者,或在其对应的元主题(Meta Topic)中发帖(如果存在)?如果他们没有回应,而此事对您足够重要,可以在 Marketplace 频道发帖,寻找自由职业者接手?

3 个赞

谢谢——已给这里唯一一位与 GitHub 用户名相似的用户发了消息,希望是同一人!

这些对核心功能的改动是否会导致像这样的插件需要进行大量重构?

我想知道为什么多选功能还没有被纳入核心功能?

是的。发生变化的是控件的配置和使用方式。

谢谢罗伯特。非常幸运的是,@j.jaffeux 刚刚表示他愿意修复这个插件——这个社区真是太棒了!

1 个赞

太棒了。既然是他的升级,他应该处于有利位置!

这应该能解决问题:

不过需要 Procourse 的某人将其合并 :slight_smile:

4 个赞

@j.jaffeux 感谢您的修复。我已经合并了它 :slight_smile:

5 个赞

你好,感谢你们两人给出的精彩反馈!

我已同时更新了插件和 Discourse 以包含最新更改,但用户个人资料页面缺少下拉字段的问题依然存在。

一个可能相关的问题是,在所有情况下,我都必须双击用户偏好设置页面左侧的“用户资料”链接。第一次点击仅显示标准用户字段,只有第二次点击才会同时显示自定义用户字段——但不包括多选字段(遗憾的是,点击三次也无济于事)。

我已在多个浏览器上尝试,并清除了每个浏览器的缓存。

我可以确认,新用户注册现在可以看到下拉选项。
这是否有助于缩小问题范围?

可以请您制作一个视频吗?

好的!2020-03-12_00h34_39|视频

在视频中,我高亮显示了用户在偏好设置页面中看到的“多选”字段。但如您所见,即使两次点击“个人资料”,该字段仍未出现,因此仍无法编辑。

您可能还会注意到用户偏好设置页面上的另一个问题:当某字段对相应用户有多个适用选项时,多选项之间没有显示逗号分隔。

当字段未显示时,请在您的浏览器控制台中向我展示错误信息。

关于逗号的问题,这不是 Discourse 的回归问题。

控制台窗口显示了以下消息,这是我第一次点击“个人资料”时出现的:

VM173:1 Uncaught SyntaxError: Unexpected token N in JSON at position 0
    at JSON.parse (<anonymous>)
    at t.init_values (_discourse-multiselect-user-field-307aa8bb3934aada9a7d682455decf422704c235754739f0d5e4b19e3e909690.js:63)
    at D (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:25381)
    at p (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:41427)
    at Function.e.create (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:42006)
    at e.t.create (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:11490)
    at t.n.create (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:18623)
    at Object.evaluate (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:60870)
    at e.t.evaluate (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:59374)
    at e.t.evaluateSyscall (_ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:62789)
init_values @ _discourse-multiselect-user-field-307aa8bb3934aada9a7d682455decf422704c235754739f0d5e4b19e3e909690.js:63
D @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:25381
p @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:41427
e.create @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:42006
t.create @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:11490
n.create @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:18623
(anonymous) @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:60870
t.evaluate @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:59374
t.evaluateSyscall @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:62789
t.evaluateInner @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:62735
t.evaluateOuter @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:62727
e.next @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:64859
e.execute @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:64843
t.handleException @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:63724
t.handleException @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:63904
t.throw @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:63622
r.evaluate @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:60213
t.execute @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:63609
t.rerender @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:63936
h.render @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:19079
V @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:25920
t._renderRoots @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:19372
t._renderRootsTransaction @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:19410
t._revalidate @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:19456
t.invoke @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:66276
t.flush @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:66168
t.flush @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:66372
t._end @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:66948
t.end @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:66634
t._run @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:67003
t._join @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:66977
t.join @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:66694
f @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:53486
(anonymous) @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:45901
r @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:49817
handleEvent @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:45897
handleEvent @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:44834
(anonymous) @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:45224
dispatch @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:5251
v.handle @ _ember_jquery-3ed0ac532033dfeecf1ec0676df6716cd7076530930c656754ccf103d35b3e23.js:5058
Show 10 more frames

再次点击“个人资料”似乎并没有改变控制台中的错误消息。
如果需要的话,我可以提供视频录制吗?
是否有可能在列出的选项之间添加逗号?目前,如果多个选项适用,它们会一个接一个地列出而没有分隔符,读起来就像是一个长长的选项字符串。

好的,我会稍后今天或明天查看。

1 个赞

非常感谢!!真的感谢您的帮助

嗨,有任何进展吗?

我不确定你是如何陷入这种状态的,但不知为何,你的设置值是错误的。我已向该插件提交了一个拉取请求(PR),以增强解析的鲁棒性,并规定在某种情况下值无法被 JSON 解析时,回退到某个默认值。

至于另一个“问题”,那是针对该插件所有者的功能请求。不过,我其实也不确定他们是否能实现它。

1 个赞

谢谢!

到目前为止,我的 Discourse 安装尚未检测到更新。

根据上面的内容,似乎需要进行“合并”操作?
我可以尝试自行完成此操作,而不会给任何人带来麻烦吗?

在此期间是否有办法手动更新插件?如果可以,Discourse 是否仍能管理后续的更新?

这不是 Discourse 核心的问题,我已向插件所有者提交了拉取请求。在他们合并之前,我们无能为力。

3 个赞

成功了!更新已生效,现在一切似乎都正常运行了——非常感谢各位!

2 个赞