Bagaimana cara membuat bidang formulir dibaca hanya menggunakan komponen ui?

10

Saya memiliki definisi komponen-ui ini dari bidang formulir Dalam modul Magento 2 saya.

    <field name="name">
        <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">Some Label</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="source" xsi:type="string">something_here</item>
                <item name="sortOrder" xsi:type="number">10</item>
                <item name="dataScope" xsi:type="string">name</item>
                <item name="notice" xsi:type="string" translate="true">Enter something here</item>
                <item name="validation" xsi:type="array">
                    <item name="required-entry" xsi:type="boolean">true</item>
                </item>
            </item>
        </argument>
    </field>

dan saya mencoba membuatnya hanya baca. Tidak dinonaktifkan Hanya dibaca saja.
Saya mencoba menambahkan:

<item name="readonly" xsi:type="boolean">true</item>  

ke bagian konfigurasi, tapi jelas saya gagal.
Bagaimana saya bisa membuat bidang dibaca hanya? Bisakah saya membuat bidang hanya dibaca?

Marius
sumber
Apa perbedaan antara parameter "dinonaktifkan" dan "hanya dibaca"? Menurut pendapat saya, kedua parameter bekerja dengan cara yang sama.
Siarhey Uchukhlebau
1
Dari yang saya tahu, dinonaktifkan berarti bidang tidak dikirim melalui pos dan hanya baca yang dikirim. Rencana saya adalah mengubah nilai bidang baca hanya melalui beberapa javascript.
Marius
Tentu, tetapi dalam bentuk magento biasa (bukan ui) atribut "readonly" berarti atribut html "dinonaktifkan". Dengan cara lain Anda harus menggunakan komponen khusus atau skrip khusus, karena tidak ada atribut "readonly" untuk ui-komponen.
Siarhey Uchukhlebau
Saya hanya akan tetap dengan jawaban Anda sekarang. Saya hanya berharap saya tidak benar-benar perlu membuat bidang dinonaktifkan di masa depan.
Marius
Biarkan formElement sebagai input dan tambahkan textText elemen seperti ini <item name = "elementTmpl" xsi: type = "string"> ui / form / element / text </item> Refer: magento.stackexchange.com/a/296735/14271
Magento_Newbie

Jawaban:

18

Coba tambahkan disabledparameter ke elemen seperti ini:

<field name="is_active">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string">Status</item>
            <item name="dataType" xsi:type="string">number</item>
            <item name="formElement" xsi:type="string">checkbox</item>
            <item name="source" xsi:type="string">vendor_rules_rule_form.vendor_rules_rule_form_data_source.is_active</item>
            <item name="prefer" xsi:type="string">toggle</item>
            <item name="disabled" xsi:type="boolean">true</item>
            <item name="valueMap" xsi:type="array">
                <item name="true" xsi:type="string">1</item>
                <item name="false" xsi:type="string">0</item>
            </item>
            <item name="sortOrder" xsi:type="number">12</item>
        </item>
    </argument>
</field>

Hasil harus sama dengan readonlyparameter untuk elemen bentuk reguler:

hasil

Siarhey Uchukhlebau
sumber
1
Saya bingung di sini. itu bekerja, tetapi terlihat salah bagi saya. Jika bidang ini dinonaktifkan, bagaimana mungkin masih dikirim melalui POST? Bagaimanapun, ini adalah pertanyaan yang berbeda. Saya akan menerima begitu saja untuk saat ini.
Marius
5
@Marius Ini kemungkinan besar karena ketika suatu formulir dikirimkan dari backend, itu bukan formulir aktual yang dikirimkan tetapi formulir baru dengan bidang tersembunyi yang dibuat saat Anda mengklik simpan. Formulir dibuat sesuai dengan bidang di Komponen UI Anda XML file dan bidang yang ditandai dengan data-form-part. Lihatlah module-ui/view/base/web/js/form/form.js::initConfig(), validate()dan submit(). Lihat juga lib/mage/utils/misc.js::submit(). Gabungan ini menambahkan formulir baru di ujung badan yang benar-benar dikirimkan.
Giel Berkers
@GielBerkers. Saya telah melakukan riset setelah mengajukan pertanyaan ini dan saya sampai pada kesimpulan yang sama seperti yang Anda jelaskan. Kamu benar. Data yang dikirim tidak berasal dari formulir.
Marius
Saya juga harus memiliki masalah yang sama .. Saya ingin mengaktifkan bidang harga untuk produk yang dapat dikonfigurasi .. Di sini saya telah menjelaskan tautan
Gopal Kacha
@Marius, Bagaimana cara membuat bidang disabledhanya dalam bentuk edit bukan dalam bentuk baru?
Vinaya Maheshwari