Сырые шаблоны — это оптимизация производительности. Поддерживаются только частичные возможности представлений Ember; именно удаление функций делает их быстрее.
Поэтому здесь мы используем другой паттерн для расширяемости. У нас нет полного жизненного цикла Ember.
Существует ли что-то подобное setupComponent(args, component) для необработанных слотов (raw outlets)? А как насчет вычисляемых свойств? Я хотел бы выполнять некоторые вычисления на основе данных в контексте. Как мне это сделать? Я даже не уверен, правильно ли назвал свой сопутствующий файл .js.es6. Должен ли я назвать его .raw.js.es6?
Возможно ли «подкрепить» шаблон (raw template) соответствующим JavaScript-кодом, как это делается для обычных компонентов, внутри компонента темы?
У меня довольно сложная задача: мне нужно управлять действиями для передачи аргументов обратно вверх по цепочке компонентов из глубоко вложенного шаблона в списке тем.
Я заметил, что в исходном коде Discourse есть несколько файлов .hbr, которые, судя по всему, соответствуют элементам JavaScript-компонентов, но обратил внимание на кое-что странное, например:
Такой наблюдатель не идеален, поскольку мы стремимся отказаться от них по мере продолжения обновления Ember. Я думаю, что лучшим решением будет создание хелпера и размещение вашего JS-кода там. Вот пример:
В некоторых недавних работах мне потребовалось, чтобы часть «дерева» шаблонов могла передавать данные от листового шаблона вверх с помощью замыкающих действий, поэтому я заменил часть файлов hbr на hbs для поддержки этого.
Эта работа носит экспериментальный характер, и я понимаю, что это повлияет на производительность, но после нескольких итераций дизайна я не смог найти альтернативный способ реализации этого, оставаясь «в рамках фреймворка».
В частности, я определяю свойства изображения в дочернем компоненте, а затем сохраняю их как свойства дедушки, чтобы повлиять на стилизацию, которая должна сохраняться за пределами текущего рендеринга списка. Данные обязательно должны передаваться наверх. Если с помощью вспомогательного компонента это можно реализовать, это звучит как хороший вариант, если я застряну с текущим подходом, спасибо!