Предпочтительный метод рекурсивного декорирования в Closure
Я ищу способ взять фрагмент документа (сгенерированный из шаблона Soy) в Google Closure и рекурсивно украсить любые элементы с соответствующими компонентами пользовательского интерфейса в реестре.
Мне кажется, что это должно быть относительно просто сделать с помощью функции, которая пересекает DOM, проверяет классы на соответствие реестру и, при необходимости, декорирует, но это казалось настолько фундаментальным вариантом использования, что мне было интересно, если я что-то упустил,
Должен ли я продолжать свою запланированную реализацию, или где-то в библиотеке есть функция, которая обрабатывает это где-то?
В качестве альтернативы, мой общий подход к украшению шаблона некорректен? Мое намерение состоит в том, чтобы иметь возможность проектировать сложные компоненты из библиотеки компонентов пользовательского интерфейса декларативно в Soy, используя минимальный JavaScript.
1 ответ
Да, библиотека не поддерживает это из коробки, может быть, какой-то внутренний код Google поддерживает, но я думаю, что они предпочли бы менее полный подход для большего контроля.
наш подход был более многофазным, я объясню это немного.
учитывая, что мы хотим использовать предварительную визуализацию (насколько это возможно), наши данные json должны отображаться с 1 по 1 в наши шаблоны, поскольку наши файлы json предоставляют схему, по которой мы генерируем наш javascript, который поддерживает наши модели в актуальном состоянии, создает наши компоненты (который вы можете продлить, зарегистрировав его на фабрике и который затем зарегистрируется для украшения). этот сгенерированный код затем имеет шаг decorateChildren, который автоматически вызывается при декорировании компонента, и поэтому мы получаем рекурсию. на самом деле мы также генерируем шаблоны, которые затем расширяются за счет использования переопределений шаблонов делегатов (потрясающая особенность системы шаблонов IMO)
Я думаю, что вы уже на правильном пути, вам просто нужно написать код, соответствующий вашим потребностям.