Magento 2: Apa yang Mempopulasikan "elem" di Komponen UI

9

Templat KnockoutJS tingkat atas dari daftar Komponen UI terlihat seperti ini

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

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

Ini diterjemahkan oleh Magento ke dalam kode KnockoutJS mentah berikut.

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

Dalam kedua kasus tersebut, templat ini akan foreachmembahas elemsproperti model tampilan .

Jika saya melihat modul RequireJS yang (saya pikir>) mengembalikan kelas konstruktor view model

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

Saya melihat insertChildmetode ini muncul untuk menambah elemsproperti.

Apa yang kurang jelas bagi saya adalah: Di mana Magento sebenarnya memanggil insertChilduntuk mengisi elemsdan / atau bagaimana elemsdiisi dengan model tampilan yang membentuk koleksi Komponen UI?

Alan Storm
sumber

Jawaban:

2

Satu-satunya info yang dapat saya temukan adalah

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

pada saluran 321 dari

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

Tampaknya ini ada di dalam fungsi yang menggabungkan komponen?

merge: function (components) {
   ...
}

Ini digunakan pada baris 73 (menjalankan fungsi) dari file yang sama (layout.js) di mana ia digunakan untuk menggabungkan node.

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

Fungsi run ini digunakan dalam 2 fungsi (proses dan penggabungan - keduanya dalam layout.js) tetapi saya tidak dapat sepenuhnya mengetahui apa yang mereka lakukan.

Memperbarui

Saya baru saja melihat yang berikut di dev docs - http://devdocs.magento.com/guides/v2.1/ui_comp_guide/concepts/ui_comp_uicollection_concept.html

elems adalah properti yang dapat diamati yang berisi koleksi komponen UI anak.

elems adalah kumpulan elemen anak dari uiCollection. Sejauh elem adalah properti yang dapat diamati, templat komponen yang ditambahkan ke elem dalam runtime, juga dirender

Ben Crook
sumber