W plikach konfiguracyjnych komponentu interfejsu użytkownika Magento 2 często widzisz item
atrybut o tym samym source
- <item name="source" xsi:type="string">block</item>
poniżej.
#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>
Do czego służą te pola? Pytam, bo wydaje się, że nie są konieczne. Na przykład moduł w tym repozytorium GitHub konfiguruje działający formularz składnika interfejsu użytkownika , ale nie używa tych name="source"
elementów.
Czy ktoś wie, do czego name="source"
służą te przedmioty? Zdaję sobie sprawę z mechaniki UI Component, która pobiera XML i tworzy go jako x-magento-init
JSON
"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"
}
},
Który jest wprowadzany do uiElement
opartego na obiekcie modelu widoku Knockout. Nie jest jednak jasne, w jaki sposób zagnieżdżone drzewo uiElement
opartych na obiektach modelu widoku Knockout korzysta z tych pól na poziomie source
pola.
Jeśli patrzę na uiElement
„s initModules
metody
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;
},
Widzę, że obiekt odwołuje się do source
właściwości, a jeśli nie jest ustawiony, będzie sięgał do rejestru dla obiektu używającego provider
właściwości jako identyfikatora łańcucha / klucza. To wydaje się wartość tych source
pozycji nie jest używany. Możliwe jednak, że są one używane przez kod PHP lub inny kod javascript. Stąd moje pytanie.
źródło
source
dzieje w tych plikach XML :)Poszedł do „źródła” (jęk) tego i wygląda na to, że te
<item name="source"/>
węzły są rzeczywiście zbędne. Lub inżynier Magento, który obecnie nimi kieruje, uważa, że są zbędne, więc jest to tak bliskie prawdy, jak to możliwe.źródło
Źródło jest kluczem, za pomocą którego komponent interfejsu użytkownika może odczytać dane dostarczone przez „ klasę DataProvider ”. Jest to bardzo przydatne, gdy istnieje wiele kart i zestawów pól.
Na przykład: patrz
module-customer/view/base/ui_component/customer_form.xml
getData()
Sposób DataProvider klasy powróci tablicę z klawiszami "klienta i Adres i odpowiednich pól w polu zestawów będą odwzorowywane z niego. Zrzut ekranu pokazuje wynikgetData()
metody.Następnie, gdy
getDataSourceData()
wywoływana jest metoda w Magento \ Ui \ Component \ Form, przetwarza powyższe dane.źródło
<item name="source
węzła. Jednak nie widzę żadnego kodu PHP, który odwoływałby się do danych w węźle źródłowym. Ponadto formularz strony CMS ma<item name="source" xsi:type="string">page</item>
węzeł, a dane źródła danych nie mająpage
klucza. Wreszcie, moje badania wskazują,name="dataScope"
że określa ono, skąd pole otrzymuje swoje wartości.