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.