In den Konfigurationsdateien für die UI-Formularkomponente von Magento 2 wird häufig ein item
Attribut mit dem folgenden source
- <item name="source" xsi:type="string">block</item>
angezeigt.
#File: vendor/magento/module-cms/view/adminhtml/ui_component/cms_block_form.xml
<field name="title">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Block Title</item>
<item name="formElement" xsi:type="string">input</item>
<item name="source" xsi:type="string">block</item>
<item name="sortOrder" xsi:type="number">20</item>
<item name="dataScope" xsi:type="string">title</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">true</item>
</item>
</item>
</argument>
</field>
Wofür sind diese Felder? Ich frage, weil es scheint, als wären sie nicht notwendig. Zum Beispiel das Modul in dieser GitHub - Repository konfiguriert eine Arbeits UI Component Form , aber diese nicht verwendet name="source"
Elemente.
Weiß jemand, wofür diese name="source"
Gegenstände sind? Mir ist die UI-Komponenten-Mechanik bekannt, die das XML als x-magento-init
JSON konfiguriert
"block_id": {
"type": "form.input",
"name": "block_id",
"dataScope": "block_id",
"config": {
"component": "Magento_Ui\/js\/form\/element\/abstract",
"template": "ui\/form\/field",
"visible": false,
"dataType": "text",
"formElement": "input",
"source": "block"
}
},
Wird in ein uiElement
basiertes Knockout-Ansichtsmodellobjekt eingespeist . Es ist jedoch nicht klar, wie die verschachtelte Baumstruktur von uiElement
Objekten des Knockout-Ansichtsmodells diese source
Felder auf Feldebene verwendet.
Wenn ich auf das Aussehen uiElement
‚s initModules
Methode
initModules: function () {
_.each(this.modules, function (name, property) {
if (name) {
this[property] = this.requestModule(name);
}
}, this);
if (!_.isFunction(this.source)) {
this.source = registry.get(this.provider);
}
return this;
},
Ich sehe, dass das Objekt auf eine source
Eigenschaft verweist und, wenn es nicht festgelegt ist, in die Registrierung nach einem Objekt greift, wobei die provider
Eigenschaft als Zeichenfolge / Schlüsselkennung verwendet wird. Es scheint, als würde der Wert dieser source
Gegenstände nicht verwendet. Es ist jedoch möglich, dass sie vom PHP-Code oder einem anderen Javascript-Code verwendet werden. Daher meine Frage.
quelle
source
in diesen XML-Dateien zu tun :)Ging zu "der Quelle" (Stöhnen) für diese und es sieht so aus, als ob diese
<item name="source"/>
Knoten in der Tat redundant sind. Oder der Magento-Ingenieur, der derzeit für sie zuständig ist, glaubt, dass sie überflüssig sind.quelle
Die Quelle ist der Schlüssel, mit dem die UI-Komponente die von der Klasse " DataProvider " bereitgestellten Daten lesen kann . Dies ist sehr nützlich, wenn mehrere Registerkarten und Feldsätze vorhanden sind.
Zum Beispiel: siehe
module-customer/view/base/ui_component/customer_form.xml
Die
getData()
Methode in der DataProvider- Klasse gibt ein Array mit den Schlüsseln 'customer' und 'address' zurück und die entsprechenden Felder in den Feldsätzen werden daraus zugeordnet. Der Screenshot zeigt das Ergebnis dergetData()
Methode.Anschließend verarbeitet die
getDataSourceData()
Methode in Magento \ Ui \ Component \ Form die oben genannten Daten.quelle
<item name="source
Knoten. Es wird jedoch kein PHP-Code angezeigt, der auf die Daten im Quellknoten verweist. Das CMS-Seitenformular verfügt außerdem über einen<item name="source" xsi:type="string">page</item>
Knoten und die Datenquellendaten haben keinenpage
Schlüssel. Schließlich gibt meine Forschung an,name="dataScope"
dass es bestimmt, wo ein Feld seine Werte bekommt.