KnockoutJS шаблон верхнего уровня для перечисления UI Component выглядит следующим образом
<!-- File: vendor/magento//module-ui/view/base/web/templates/collection.html -->
<each args="data: elems, as: 'element'">
<render if="hasTemplate()"/>
</each>
Это переводится Magento в следующий необработанный код KnockoutJS.
<!-- ko foreach: {data: elems, as: 'element'} -->
<!-- ko if: hasTemplate() --><!-- ko template: getTemplate() --><!-- /ko --><!-- /ko -->
<!-- /ko -->
В любом случае этот шаблон будет foreach
поверх elems
свойства модели представления .
Если я смотрю на модуль RequireJS, который (я думаю>) возвращает класс конструктора модели представления
vendor/magento/module-ui/view/base/web/js/lib/core/collection.js
Я вижу, что insertChild
метод, кажется, добавляет к elems
свойству.
Что менее понятно для меня: где Magento фактически вызывается insertChild
для заполнения elems
и / или как elems
заполняются моделями представлений, которые составляют коллекцию компонентов пользовательского интерфейса?
magento2
uicomponent
knockoutjs
Алан Сторм
источник
источник
Ответы:
Единственная информация, которую я могу найти,
по строке 321
Кажется, это внутри функции, которая объединяет компоненты?
Это используется в строке 73 (функция запуска) того же файла (layout.js), где он используется для объединения узлов.
Эта функция запуска используется в 2 функциях (процесс и слияние - оба в
layout.js
), но я не могу полностью понять, что они делают.Обновить
Я только что видел следующее в документации разработчика - http://devdocs.magento.com/guides/v2.1/ui_comp_guide/concepts/ui_comp_uicollection_concept.html
elems - это наблюдаемое свойство, которое содержит коллекцию дочерних компонентов пользовательского интерфейса.
elems - это коллекция дочерних элементов uiCollection. Поскольку elems является наблюдаемым свойством, шаблоны компонентов, добавляемых к elems во время выполнения, также отображаются
источник