Jak zrobić pole formularza tylko do odczytu przy użyciu komponentów interfejsu użytkownika?


10

Mam definicję pola formularza w komponencie interfejsu użytkownika w moim module 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>

i próbuję zrobić to tylko do odczytu. Nie wyłączony Tylko do odczytu.
Próbowałem dodać:

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

do sekcji konfiguracji, ale oczywiście mi się nie udało.
Jak mogę zrobić pole tylko do odczytu? Czy mogę zrobić pole tylko do odczytu?


Jaka jest różnica między parametrami „wyłączony” i „tylko do odczytu”? Moim zdaniem oba parametry działają w podobny sposób.
— Siarhey Uchukhlebau

1
Z tego co wiem, wyłączone oznacza, że ​​pole nie jest wysyłane pocztą i tylko do odczytu. Mój plan polega na zmodyfikowaniu wartości pola tylko do odczytu za pomocą jakiegoś javascript.
— Marius

Jasne, ale w zwykłej formie magento (nie interfejsu użytkownika) atrybut „tylko do odczytu” oznacza atrybut html „wyłączony”. W inny sposób powinieneś użyć niestandardowego komponentu lub niestandardowego skryptu, ponieważ atrybut „tylko do odczytu” nie istnieje dla komponentów interfejsu użytkownika.
— Siarhey Uchukhlebau

Po prostu trzymam się twojej odpowiedzi. Mam tylko nadzieję, że nie muszę w przyszłości wyłączać pola.
— Marius

Pozostaw formElement jako dane wejściowe i dodaj element tekstowy taki jak <item name = "elementTmpl" xsi: type = "string"> ui / form / element / text </item> Patrz: magento.stackexchange.com/a/296735/14271
— Magento_Newbie

Odpowiedzi:


18

Spróbuj dodać disabledparametr do elementu w następujący sposób:

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

Wynik powinien być podobny do readonlyparametru dla zwykłego elementu formularza:

wynik


1
Jestem zaskoczony. to działa, ale dla mnie wygląda źle. Jeśli pole jest wyłączone, dlaczego nadal wysyłane jest za pośrednictwem POST? W każdym razie to inne pytanie. Na razie wezmę to za pewnik.
— Marius

5
@Marius Jest to najprawdopodobniej dlatego, że gdy formularz jest przesyłany z backendu, nie jest to faktyczny formularz, który jest przesyłany, ale nowy formularz z ukrytymi polami, który jest tworzony po kliknięciu przycisku Zapisz. Formularz jest tworzony zgodnie z polami w pliku XML składników interfejsu użytkownika i polami oznaczonymi data-form-part. Przyjrzeć module-ui/view/base/web/js/form/form.js::initConfig(), validate()i submit(). Zobacz także lib/mage/utils/misc.js::submit(). Te połączone dodają nowy formularz na końcu faktycznie przesłanego formularza.
— Giel Berkers

@GielBerkers. Przeprowadziłem badania po zadaniu tego pytania i doszedłem do tego samego wniosku, co wyjaśniłeś. Masz rację. Przesłane dane nie pochodzą z formularza.
— Marius

Mam również ten sam problem jak w przypadku .. Chcę włączyć pole ceny dla konfigurowalnego produktu .. Tutaj wyjaśniłem link
— Gopal Kacha

@Marius, Jak zrobić pole disabledtylko w formularzu edycji, a nie w nowym formularzu?
— Vinaya Maheshwari,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.