Ох … это действительно 
Позвольте мне проиллюстрировать.
Вот селектор в последней версии Chatbot, обратите внимание, что он в состоянии “выключено”:
Теперь давайте изменим этот выбор:
и он, словно по волшебству
, раскрывает настройки, которые нужно учитывать только при выборе этого значения.
Это превосходный способ уменьшить ненужный визуальный шум в настройках плагинов и упростить их конфигурацию, снижая когнитивную нагрузку 

12 лайков
челюсть отвисает Я ждал чего-то подобного очень-оооочень долго. бросается проверять репозиторий Есть ли какая-нибудь документация по этому поводу?
1 лайк
Не стесняйтесь использовать Chatbot в качестве примера его применения:
И я уверен, что сейчас в ядре есть куча других примеров использования…
2 лайка
Документация существует, но, насколько мне известно, она фрагментирована, а не представлена в виде самостоятельного руководства для разработчиков.
Основные авторитетные источники:
-
Документация схемы в config/site_settings.yml:52, охватывающая depends_on, depends_on_values, depends_behavior и dependent_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.
Базовый синтаксис:
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 лайка