Magento 2: O que preenche "elems" em um componente de interface do usuário

9

O modelo KnockoutJS de nível superior da lista Componente da UI é semelhante a este

<!-- File: vendor/magento//module-ui/view/base/web/templates/collection.html -->

<each args="data: elems, as: 'element'">
    <render if="hasTemplate()"/>
</each>

Isso é traduzido pelo Magento no seguinte código KnockoutJS bruto.

<!-- ko foreach: {data: elems, as: 'element'} -->
    <!-- ko if: hasTemplate() --><!-- ko template: getTemplate() --><!-- /ko --><!-- /ko -->
<!-- /ko -->

Nos dois casos, esse modelo foreachsubstituirá a elemspropriedade do modelo de exibição .

Se eu olhar para o módulo RequireJS que (acho>) retorna a classe construtora do modelo de exibição

vendor/magento/module-ui/view/base/web/js/lib/core/collection.js

Vejo que o insertChildmétodo parece adicionar à elemspropriedade.

O que é menos claro para mim é: para onde o Magento realmente liga insertChildpara preencher elemse / ou como é elemspreenchido com os modelos de exibição que compõem uma coleção de componentes da interface do usuário?

Alan Storm
fonte

Respostas:

2

A única informação que posso encontrar é

registry.get(component.parentName).insertChild(component, val.value);

na linha 321 de

vendor/magento/module-ui/view/base/web/js/core/renderer/layout.js

Parece que isso está dentro de uma função que mescla componentes?

merge: function (components) {
   ...
}

Isso é usado na linha 73 (função de execução) do mesmo arquivo (layout.js) em que é usado para mesclar nós.

function run(nodes, parent, cached, merge) {
    if (_.isBoolean(merge) && merge) {
        layout.merge(nodes);

        return false;
    }

    if (cached) {
        cachedConfig[_.keys(nodes)[0]] = JSON.parse(JSON.stringify(nodes));
    }

    _.each(nodes || [], layout.iterator.bind(layout, parent));
}

Essas funções de execução são usadas em 2 funções (processo e mesclagem - ambas em layout.js), mas não consigo entender completamente o que elas fazem.

Atualizar

Acabei de ver o seguinte nos documentos do desenvolvedor - http://devdocs.magento.com/guides/v2.1/ui_comp_guide/concepts/ui_comp_uicollection_concept.html

elems é a propriedade observável que contém a coleção de componentes de interface do usuário filho.

elems é a coleção dos elementos filhos do uiCollection. Quanto elems é a propriedade observável, os modelos dos componentes adicionados aos elems no tempo de execução também são renderizados

Ben Crook
fonte