En los archivos de configuración de componentes de formulario de IU de Magento 2, a menudo verá un item
atributo con el mismo de source
- <item name="source" xsi:type="string">block</item>
a continuación.
#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>
¿Para qué son estos campos? Pregunto porque parece que no son necesarios. Por ejemplo, el módulo en este repositorio de GitHub configura un formulario de componente de interfaz de usuario que funciona , pero no usa estos name="source"
elementos.
¿Alguien sabe lo que estos name="source"
sirven artículos? Soy consciente de la mecánica del componente UI que toma el XML y lo configura como 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"
}
},
Que se alimenta a un uiElement
objeto de modelo de vista Knockout basado. Sin embargo, no está claro cómo el árbol anidado de los uiElement
objetos del modelo de vista Knockout basado utiliza estos campos de nivel de source
campo.
Si miro el uiElement
's initModules
método
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;
},
Veo que el objeto hace referencia a una source
propiedad, y si no está configurado, alcanzará el registro de un objeto usando la provider
propiedad como un identificador de cadena / clave. Se parece que el valor de estos source
no se utiliza artículos. Sin embargo, es posible que los use el código PHP o algún otro código javascript. Por lo tanto, mi pregunta.
fuente
source
haciendo en esos archivos XML :)Fui a "la fuente" (gemido) para este y parece que estos
<item name="source"/>
nodos son, de hecho, redundantes. O, el ingeniero de Magento actualmente a cargo de ellos piensa que son redundantes, así que eso es lo más cercano a la verdad que obtendremos.fuente
La fuente es la clave que utiliza el componente ui para leer los datos proporcionados por " DataProvider clase ". Es muy útil cuando hay múltiples pestañas y conjuntos de campos.
Por ejemplo: referir
module-customer/view/base/ui_component/customer_form.xml
El
getData()
método en la clase DataProvider devolverá una matriz con las claves 'cliente' y 'dirección' y los campos correspondientes en los conjuntos de campos se asignarán a partir de ella. La captura de pantalla muestra el resultado delgetData()
método.Luego, cuando
getDataSourceData()
se llama al método en Magento \ Ui \ Component \ Form, procesa los datos anteriores.fuente
<item name="source
nodo. Sin embargo, no veo ningún código PHP que haga referencia a los datos en el nodo de origen. Además, el formulario de página CMS tiene un<item name="source" xsi:type="string">page</item>
nodo y su fuente de datos no tiene unapage
clave. Finalmente, mi investigación indicaname="dataScope"
que determina dónde obtiene sus valores un campo.