Я создал плагин для добавления дополнительных полей к группам. Однако они применяются только к группам, в названии которых есть слово «chapter». Поэтому нет смысла отображать их для групп с другими целями. Можно ли создать условие, например, if chapter in group.name; then chapter = true?
У меня есть следующее:
Я хочу скрыть группу элементов управления вверху, если в названии группы нет слова «chapter». Похоже, я уже использую некоторый синтаксис Jinja2 из примера, который я применял. Если он похож на другие реализации Jinja2, то я могу создать такое условие там. Но для этого мне нужно знать несколько вещей.
Если Jinja2 полностью доступен, как получить доступ к переменной с названием группы, чтобы создать условие?
Если Jinja2 не (полностью) доступен, как тогда создать это условие? Вероятно, для этого потребуется какой-то другой JavaScript, который установит булево значение. Но структура этих переменных группы и логика JavaScript мне неизвестны — любые примеры были бы очень кстати!
Ой, постойте… Я вдруг вижу несколько методов для тестирования. Если Jinja2 здесь работает, то в g.json действительно видно название группы, и его можно использовать для условия…
А, нет, это не работает. И это не Jinja2, это специфичные для Handlebars вещи (но я полагаю, что contains — не встроенная функция?).
Но это тоже не работает, я получаю множество ошибок. Вероятно, я неправильно обращаюсь к переменной. Хотя замена group.name на просто "chapter_netherlands" тоже не помогает.
Произошла ошибка:
- При рендеринге:
- top-level
application
discourse-root
group
group.manage
group.manage.profile
groups-form-profile-fields
plugin-outlet
plugin-connector
Необрабатываемая ошибка: Попытка разрешить `contains`, который ожидался как компонент, но ничего не было найдено.
Итак, я понял, что мне нужно создавать эти функции самостоятельно, в отличие от Jinja2, где есть полезные встроенные возможности для этого.
Но где именно в моём плагине следует создавать эти функции Handlebars? Я вижу множество примеров здесь: Repository search results · GitHub
Однако я не вижу чёткого паттерна в структуре этой папки. Я создал свою собственную функцию в discourse-group-custom-fields/assets/javascripts/discourse/app/helpers/contains.js, но при попытке использовать её в discourse-group-custom-fields/assets/javascripts/discourse/connectors/group-edit/field-container.hbs получаю ошибку: Uncaught Error: Attempted to resolve "contains", which was expected to be a component, but nothing was found.. Очевидно, что это не тот путь, куда Discourse обращается, или я что-то делаю неправильно.
В теме ниже предполагается, что это может находиться в директории initializers и иметь расширение es6.
Поэтому я переместил свой contains.js в эту директорию, добавил расширение .es6, но получил ту же ошибку. Любая помощь или документация были бы очень кстати