จะสร้างฟิลด์แบบฟอร์มโดยใช้องค์ประกอบของ UI แบบอ่านอย่างเดียวได้อย่างไร


10

ฉันมีคำจำกัดความองค์ประกอบ UI ของฟิลด์ฟอร์มในโมดูล Magento 2 ของฉัน

    <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>

และฉันพยายามทำให้อ่านได้อย่างเดียว ไม่ได้ปิดการใช้งาน เพียงแค่อ่านอย่างเดียว
ฉันพยายามเพิ่ม:

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

ไปยังส่วนกำหนดค่า แต่เห็นได้ชัดว่าฉันล้มเหลว
ฉันจะทำให้ฟิลด์อ่านได้อย่างเดียวได้อย่างไร ฉันสามารถสร้างฟิลด์แบบอ่านอย่างเดียวได้ไหม


พารามิเตอร์ "ปิดใช้งาน" และ "อ่านอย่างเดียว" แตกต่างกันอย่างไร ในความคิดของฉันพารามิเตอร์ทั้งสองทำงานในลักษณะเดียวกัน
Siarhey Uchukhlebau

1
จากสิ่งที่ฉันรู้ปิดการใช้งานหมายถึงเขตข้อมูลจะไม่ถูกส่งผ่านโพสต์และถูกส่งไปอ่าน แผนของฉันคือการปรับเปลี่ยนค่าของฟิลด์อ่านอย่างเดียวผ่าน javascript บางตัว
Marius

แน่นอน แต่ในรูปแบบวีโอไอพีปกติ (ไม่ใช่ UI) แอตทริบิวต์ "อ่านอย่างเดียว" หมายถึง html-attribute "ปิดใช้งาน" ในทางอื่นคุณควรใช้องค์ประกอบที่กำหนดเองหรือสคริปต์ที่กำหนดเองเพราะไม่มีแอตทริบิวต์ "อ่านอย่างเดียว" สำหรับคอมโพเนนต์ ui
Siarhey Uchukhlebau

ตอนนี้ฉันจะตอบคำถามของคุณแล้ว ฉันแค่หวังว่าฉันไม่จำเป็นต้องทำให้ฟิลด์ถูกปิดใช้งานในอนาคต
Marius

ปล่อย formElement เป็นอินพุตและเพิ่ม text elementTmpl เช่น <item name = "elementTmpl" xsi: type = "string"> ui / form / element / text </item> อ้างอิง: magento.stackexchange.com/a/296735/14271
Magento_Newbie

คำตอบ:


18

ลองเพิ่มdisabledพารามิเตอร์ในองค์ประกอบดังนี้:

<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>

ผลลัพธ์ควรคล้ายกับreadonlyพารามิเตอร์สำหรับองค์ประกอบรูปแบบปกติ:

ผลลัพธ์


1
ฉันงงงวยที่นี่ มันใช้งานได้ แต่มันดูผิดสำหรับฉัน หากปิดใช้งานฟิลด์จะยังคงมีการส่งผ่านทาง POST อย่างไร อย่างไรก็ตามนี่เป็นคำถามที่แตกต่าง ฉันจะใช้สิ่งนี้เพื่อรับตอนนี้
Marius

5
@Marius นี่เป็นไปได้มากที่สุดเนื่องจากเมื่อมีการส่งแบบฟอร์มจากแบ็กเอนด์ไม่ใช่แบบฟอร์มจริงที่ส่ง แต่เป็นฟอร์มใหม่ที่มีเขตข้อมูลที่ซ่อนอยู่ซึ่งสร้างขึ้นเมื่อคุณคลิกบันทึก แบบฟอร์มที่ถูกสร้างขึ้นตามทุ่งนาใน UI ส่วนประกอบ XML data-form-partไฟล์และสาขาของคุณที่มีเครื่องหมาย ลองดูที่module-ui/view/base/web/js/form/form.js::initConfig(), และvalidate() นอกจากนี้ยังมองไปที่submit() lib/mage/utils/misc.js::submit()รวมกันเหล่านี้เพิ่มรูปแบบใหม่ที่ส่วนท้ายของร่างกายที่ส่งจริง
Giel Berkers

@GielBerkers ฉันได้ทำการวิจัยหลังจากถามคำถามนี้แล้วและฉันก็มาถึงข้อสรุปเดียวกับที่คุณอธิบาย คุณพูดถูก ข้อมูลที่ส่งมาไม่ได้มาจากแบบฟอร์ม
Marius

ฉันต้องเหมือนกันกับปัญหา .. ฉันต้องการเปิดใช้งานฟิลด์ราคาสำหรับผลิตภัณฑ์ที่กำหนดค่าได้ ... ที่นี่ฉันได้อธิบายลิงก์
Gopal Kacha

@Marius วิธีการทำให้ฟิลด์disabledเฉพาะในแบบฟอร์มแก้ไขไม่ได้อยู่ในรูปแบบใหม่
Vinaya Maheshwari
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.