Dalam file konfigurasi Komponen Bentuk UI Magento 2, Anda akan sering melihat item
atribut dengan yang sama source
- di <item name="source" xsi:type="string">block</item>
bawah.
#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>
Untuk apa bidang-bidang ini? Saya bertanya karena sepertinya mereka tidak perlu. Sebagai contoh, modul dalam repositori GitHub ini mengonfigurasi bentuk Komponen UI yang berfungsi , tetapi tidak menggunakan name="source"
item ini .
Apakah ada yang tahu untuk apa name="source"
barang - barang ini? Saya mengetahui mekanika Komponen UI yang mengambil XML dan cofigures sebagai 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"
}
},
Yang dimasukkan ke uiElement
objek model tampilan Knockout berbasis. Namun, tidak jelas bagaimana pohon uiElement
objek model tampilan Knockout bersarang menggunakan bidang tingkat source
bidang ini.
Jika saya melihat uiElement
's initModules
metode
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;
},
Saya melihat objek referensi source
properti, dan jika tidak disetel, akan mencapai ke registri untuk objek menggunakan provider
properti sebagai pengenal string / kunci. Ini tampaknya seperti nilai ini source
item tidak digunakan. Namun, mungkin saja mereka digunakan oleh kode PHP, atau kode javascript lainnya. Karena itu, pertanyaan saya.
sumber
source
dilakukan di file XML itu :)Pergi ke "sumber" (mengerang) untuk yang satu ini dan sepertinya
<item name="source"/>
node - node ini memang berlebihan. Atau, insinyur Magento yang saat ini bertanggung jawab atas mereka mengira mereka mubazir, jadi itu sedekat mungkin dengan kebenaran.sumber
Sumber adalah kunci yang digunakan komponen ui untuk membaca data yang disediakan oleh kelas " DataProvider ". Ini sangat berguna ketika ada banyak tab dan bidang.
Misalnya: merujuk
module-customer/view/base/ui_component/customer_form.xml
The
getData()
metode dalam DataProvider kelas akan mengembalikan array dengan kunci 'pelanggan' dan 'alamat' dan bidang yang sesuai dalam bidang-set akan dipetakan dari itu. Tangkapan layar menampilkan hasilgetData()
metode.Setelah itu ketika
getDataSourceData()
metode di Magento \ Ui \ Component \ Form dipanggil untuk memproses data di atas.sumber
<item name="source
simpul. Namun, saya tidak melihat kode PHP yang mereferensikan data di node sumber. Selain itu, formulir Halaman CMS memiliki<item name="source" xsi:type="string">page</item>
simpul dan sumber data datanya tidak memilikipage
kunci. Akhirnya, penelitian saya menunjukkan ituname="dataScope"
yang menentukan di mana bidang mendapatkan nilainya.