Le modèle KnockoutJS de niveau supérieur de la liste des composants d'interface utilisateur ressemble à ceci
<!-- File: vendor/magento//module-ui/view/base/web/templates/collection.html -->
<each args="data: elems, as: 'element'">
<render if="hasTemplate()"/>
</each>
Ceci est traduit par Magento dans le code KnockoutJS brut suivant.
<!-- ko foreach: {data: elems, as: 'element'} -->
<!-- ko if: hasTemplate() --><!-- ko template: getTemplate() --><!-- /ko --><!-- /ko -->
<!-- /ko -->
Dans les deux cas, ce modèle foreach
survolera la elems
propriété du modèle de vue .
Si je regarde le module RequireJS qui (je pense>) renvoie la classe constructeur du modèle de vue
vendor/magento/module-ui/view/base/web/js/lib/core/collection.js
Je vois que la insertChild
méthode semble s'ajouter à la elems
propriété.
Ce qui est moins clair pour moi est: où Magento appelle-t-il réellement insertChild
pour remplir le elems
et / ou comment est-il elems
rempli avec les modèles de vue qui composent une collection de composants d'interface utilisateur?
magento2
uicomponent
knockoutjs
Alan Storm
la source
la source
Réponses:
La seule information que je peux trouver est
à la ligne 321 du
Il semble que ce soit à l'intérieur d'une fonction qui fusionne les composants?
Ceci est utilisé sur la ligne 73 (fonction run) du même fichier (layout.js) où il est utilisé pour fusionner les nœuds.
Ces fonctions d'exécution sont utilisées dans 2 fonctions (processus et fusion - les deux dedans
layout.js
) mais je ne peux pas comprendre complètement ce qu'elles font.Mise à jour
Je viens de voir ce qui suit dans les documents de développement - http://devdocs.magento.com/guides/v2.1/ui_comp_guide/concepts/ui_comp_uicollection_concept.html
elems est la propriété observable qui contient la collection de composants d'interface utilisateur enfants.
elems est la collection des éléments enfants de uiCollection. Dans la mesure où elems est la propriété observable, les modèles des composants ajoutés aux elems dans le runtime sont également rendus
la source