Magento 2:UIコンポーネントで「elems」を生成するもの


9

リストUIコンポーネントの最上位のKnockoutJSテンプレートは次のようになります。

<!-- 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てどこにデータを入力するか、UIコンポーネントのコレクションを構成するビューモデルをelemsどのようにelems入力するのですか?


私はそれがここで行われると思います:app / code / Magento / Ui / view / base / web / js / core / renderer / layout.js
ps202

回答:


2

私が見つけることができる唯一の情報は

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

の321行目

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

これはコンポーネントをマージする関数の中にあるようです?

merge: function (components) {
   ...
}

これは、ノードのマージに使用される同じファイル(layout.js)の73行目(関数の実行)で使用されます。

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

この実行関数は2つの関数(プロセスとマージ-の両方layout.js)で使用されますが、それらが何をするのか完全には理解できません。

更新

私はちょうど開発ドキュメントで以下を見ました-http ://devdocs.magento.com/guides/v2.1/ui_comp_guide/concepts/ui_comp_uicollection_concept.html

elemsは、子UIコンポーネントのコレクションを含む監視可能なプロパティです。

elemsは、uiCollectionの子要素のコレクションです。elemsが監視可能なプロパティである限り、ランタイムでelemsに追加されたコンポーネントのテンプレートもレンダリングされます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.