В файлах конфигурации компонента формы пользовательского интерфейса Magento 2 вы часто будете видеть item
атрибут с тем же source
- <item name="source" xsi:type="string">block</item>
ниже.
#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>
Для чего эти поля? Я спрашиваю, потому что кажется, что они не нужны. Например, модуль в этом репозитории GitHub настраивает рабочую форму компонента пользовательского интерфейса , но не использует эти name="source"
элементы.
Кто-нибудь знает, для чего эти name="source"
предметы? Мне известно о механике компонентов пользовательского интерфейса, которая принимает XML и настраивает его как 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"
}
},
Который подается в uiElement
объект модели представления на основе Knockout. Однако неясно, как вложенное дерево uiElement
объектов модели представления на основе Knockout использует эти поля уровня source
поля.
Если я смотрю на uiElement
«S initModules
метод
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;
},
Я вижу, что объект ссылается на source
свойство и, если он не установлен, попадет в реестр для объекта, использующего provider
свойство в качестве идентификатора строки / ключа. Это кажется , что стоимость этих source
предметов не используется. Однако возможно, что они используются кодом PHP или другим кодом JavaScript. Отсюда и мой вопрос.
источник
source
Пошел к «источнику» (стону) для этого, и похоже, что эти
<item name="source"/>
узлы действительно избыточны. Или инженер Magento, в настоящее время отвечающий за них, считает, что они избыточны, так что это настолько близко к истине, насколько мы узнаем.источник
Источник - это ключ, с помощью которого компонент пользовательского интерфейса может читать данные, предоставленные классом « DataProvider ». Это очень полезно, когда есть несколько вкладок и наборов полей.
Например: обратитесь
module-customer/view/base/ui_component/customer_form.xml
getData()
Метод в DataProvider классе будет возвращать массив с ключами «клиент» и «адрес» и соответствующие поля в поле наборов будут отображаться из него. Снимок экрана показывает результатgetData()
метода.Затем, когда
getDataSourceData()
вызывается метод в Magento \ Ui \ Component \ Form, он обрабатывает вышеуказанные данные.источник
<item name="source
узла. Однако я не вижу никакого кода PHP, который ссылается на данные в исходном узле. Кроме того, форма страницы CMS имеет<item name="source" xsi:type="string">page</item>
узел, а данные источника данных не имеютpage
ключа. Наконец, мое исследование показывает,name="dataScope"
что оно определяет, где поле получает свои значения.