Come creare un campo modulo in sola lettura usando i componenti ui?


10

Ho questa definizione ui-componente di un campo modulo Nel mio modulo 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>

e sto cercando di farlo in sola lettura. Non disabilitato Di sola lettura.
Ho provato ad aggiungere:

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

nella sezione di configurazione, ma ovviamente ho fallito.
Come posso rendere il campo di sola lettura? Posso rendere il campo di sola lettura?


Che differenza tra i parametri "disabilitato" e "di sola lettura"? Secondo me entrambi i parametri funzionano in modo simile.
Siarhey Uchukhlebau,

1
Da quello che so, disabilitato significa che il campo non viene inviato per posta e viene inviato di sola lettura. Il mio piano è di modificare il valore del campo di sola lettura tramite alcuni javascript.
Marius

Certo, ma in forma magento normale (non ui) l'attributo "sola lettura" significa che l'attributo html "disabilitato". In caso contrario, è necessario utilizzare un componente personalizzato o uno script personalizzato, poiché l'attributo "readonly" non esiste per i componenti dell'interfaccia utente.
Siarhey Uchukhlebau,

Ora continuerò con la tua risposta. Spero solo di non dover effettivamente disabilitare un campo in futuro.
Marius

Lascia formElement come input e aggiungi text elementTmpl in questo modo <item name = "elementTmpl" xsi: type = "string"> ui / form / element / text </item> Consulta: magento.stackexchange.com/a/296735/14271
Magento_Newbie

Risposte:


18

Prova ad aggiungere il disabledparametro all'elemento in questo modo:

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

Il risultato dovrebbe essere simile al readonlyparametro per l'elemento del modulo normale:

risultato


1
Sono perplesso qui. funziona, ma mi sembra sbagliato. Se il campo è disabilitato, come mai viene ancora inviato tramite POST? Comunque, questa è una domanda diversa. Lo darò per scontato per ora.
Marius

5
@Marius Questo è molto probabilmente perché quando un modulo viene inviato dal back-end, non è il modulo effettivo che viene inviato, ma un nuovo modulo con campi nascosti che viene creato quando si fa clic su Salva. Il modulo viene creato in base ai campi nel file XML dei componenti dell'interfaccia utente e ai campi contrassegnati con data-form-part. Dai un'occhiata a module-ui/view/base/web/js/form/form.js::initConfig(), validate()e submit(). Guarda anche lib/mage/utils/misc.js::submit(). Questi combinati aggiungono un nuovo modulo alla fine del corpo che viene effettivamente inviato.
Giel Berkers,

@GielBerkers. Ho fatto delle ricerche dopo aver fatto questa domanda e sono giunto alla stessa conclusione che mi hai spiegato. Hai ragione. I dati inviati non provengono da un modulo.
Marius

Ho anche lo stesso problema .. Voglio abilitare il campo dei prezzi per un prodotto configurabile .. Qui ho spiegato il link
Gopal Kacha,

@Marius, Come rendere il campo disabledsolo in forma di modifica e non in una nuova forma?
Vinaya Maheshwari,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.