Як зробити поле форми лише заново, використовуючи 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>  

до розділу конфігурацій, але явно не вдалося.
Як я можу зробити поле читати тільки? Чи можу я зробити поле читати тільки?


Яка різниця між параметрами "вимкнено" та "лише для читання"? На мою думку, обидва параметри працюють аналогічно.
Сіархей Учукхлебау

1
З того, що я знаю, відключений означає, що поле не надсилається поштою, а надсилається лише читання. Мій план полягає в тому, щоб змінити значення поля для читання лише через деякий JavaScript.
Маріус

Звичайно, але в звичайній формі magento (не ui) атрибут "readonly" означає html-атрибут "вимкнено". Іншим способом слід використовувати спеціальний компонент або нестандартний сценарій, не застосовуючи атрибут "readonly" для ui-компонентів.
Сіархей Учукхлебау

Я зараз буду дотримуватися вашої відповіді. Я просто сподіваюся, що мені насправді не потрібно робити поле відключеним у майбутньому.
Маріус

Залиште formElement як вхід і додайте текстовий елементTmpl, як цей <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? У всякому разі, це вже інше питання. Я зараз це сприйму як належне.
Маріус

5
@Marius Це, швидше за все, тому що, коли форма подається з бекенда, подається не фактична форма, а нова форма із прихованими полями, яка створюється при натисканні кнопки "Зберегти". Форма створюється відповідно до полів у вашому 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. Я зробив кілька досліджень після того, як задав це питання, і прийшов до того ж висновку, що ви пояснили. Ти правий. Надіслані дані не надходять із форми.
Маріус

Мені також доводиться так само, як і питання .. Я хочу включити цінове поле для настроюваного продукту .. Тут я пояснив посилання
Gopal Kacha

@Marius, Як зробити поле disabledлише у формі редагування, а не в новій формі?
Vinaya Maheshwari
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.