依赖插件设置……太棒了!

噢……这真的 :chefs_kiss:

让我来展示一下。

这是最新版 Chatbot 中的一个选择器,注意它处于“关闭”状态:

现在让我们更改这个选择:

就像 :sparkles: 魔法一样,它揭示了只有在该值被选中时才需要考虑的设置。

这是一种非常 的方式,可以减少插件设置中不必要的杂乱,让配置变得更简单,降低认知负担 :tada:

Daniel Labelle's Fast Cleaning Challenge

12 个赞

下巴掉地上 我盼这种东西已经非常非常久了。赶紧去查仓库 有相关的文档吗?

1 个赞

请随意参考 Chatbot 的使用,作为一个大致有帮助的示例:

而且我敢肯定,现在核心代码中肯定有很多类似的用法……

2 个赞

有相关文档,但据我所知,目前这些文档是零散的,而非作为独立的开发者指南呈现。

主要的权威参考资料包括:

  • config/site_settings.yml:52 中的模式文档,涵盖 depends_ondepends_on_valuesdepends_behaviordependent_setting_display

  • .skills/discourse-site-settings/SKILL.md:203 中更详细的指南和示例。

  • spec/lib/site_setting_extension_spec.rb:706 中的后端行为规范。

  • frontend/discourse/admin/services/admin-site-setting-store.js:41 中的前端依赖解析。

  • frontend/discourse/tests/acceptance/admin-site-settings-test.js:142 中的 UI 示例。

基本语法如下:

child_setting:
  default: ""
  depends_on:
     - parent_setting
  depends_behavior: "hidden"

对于枚举或字符串类型的父设置:

 child_setting:
    default: ""
    depends_on:
      - parent_setting
    depends_on_values:
      parent_setting:
        - enabled_mode
        - another_mode
    depends_behavior: "hidden"
    dependent_setting_display: "inline"

一个重要限制:依赖项可以包含多个直接父项,但依赖解析不具有传递性。例如 A → B → C 这样的嵌套链并不会自动让 C 去判断 B 是否被 A 隐藏;C 仅评估 B 的存储值。

4 个赞