Magento 2: Cosa popola "elems" in un componente UI


9

Il modello KnockoutJS di livello superiore che elenca il componente UI è simile al seguente

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

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

Questo è tradotto da Magento nel seguente codice Raw KnockoutJS.

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

In entrambi i casi, questo modello si foreachsovrapporrà alla elemsproprietà del modello di visualizzazione .

Se guardo il modulo RequireJS che (penso>) restituisce la classe di costruzione del modello di vista

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

Vedo che il insertChildmetodo sembra aggiungere alla elemsproprietà.

Ciò che è meno chiaro per me è: dove chiama Magento insertChildper popolare il elemse / o come viene elemspopolato con i modelli di vista che compongono una raccolta di componenti dell'interfaccia utente?


Risposte:


2

Le uniche informazioni che posso trovare sono

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

sulla linea 321 di

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

Sembra che questo sia all'interno di una funzione che unisce i componenti?

merge: function (components) {
   ...
}

Viene utilizzato sulla riga 73 (funzione di esecuzione) dello stesso file (layout.js) in cui viene utilizzato per unire i nodi.

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));
}

Questa funzione di esecuzione viene utilizzata in 2 funzioni (processo e unione - entrambi in layout.js) ma non riesco a capire completamente cosa fanno.

Aggiornare

Ho appena visto quanto segue nei documenti di sviluppo: http://devdocs.magento.com/guides/v2.1/ui_comp_guide/concepts/ui_comp_uicollection_concept.html

elems è la proprietà osservabile che contiene la raccolta di componenti dell'interfaccia utente figlio.

elems è la raccolta degli elementi figlio di uiCollection. Per quanto riguarda elems è la proprietà osservabile, vengono anche resi i template dei componenti aggiunti a elems nel runtime

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.