Wie erstelle ich ein Formularfeld schreibgeschützt mit UI-Komponenten?

10

Ich habe diese UI-Komponenten-Definition eines Formularfelds in meinem Magento 2-Modul.

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

und ich versuche es schreibgeschützt zu machen. Nicht behindert. Nur schreibgeschützt.
Ich habe versucht hinzuzufügen:

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

zum Konfigurationsabschnitt, aber offensichtlich habe ich versagt.
Wie kann ich das Feld schreibgeschützt machen? Kann ich das Feld schreibgeschützt machen?

Marius
quelle
Was für ein Unterschied zwischen den Parametern "deaktiviert" und "schreibgeschützt"? Meiner Meinung nach funktionieren beide Parameter ähnlich.
Siarhey Uchukhlebau
1
Soweit ich weiß, bedeutet deaktiviert, dass das Feld nicht per Post und schreibgeschützt gesendet wird. Mein Plan ist es, den Wert des schreibgeschützten Feldes über Javascript zu ändern.
Marius
Sicher, aber in normaler Magento-Form (nicht UI) bedeutet das Attribut "schreibgeschützt" das HTML-Attribut "deaktiviert". Auf andere Weise sollten Sie eine benutzerdefinierte Komponente oder ein benutzerdefiniertes Skript verwenden, da das Attribut "readonly" für die UI-Komponenten nicht vorhanden ist.
Siarhey Uchukhlebau
Ich werde mich jetzt nur an deine Antwort halten. Ich hoffe nur, dass ich in Zukunft kein Feld deaktivieren muss.
Marius
Lassen Sie formElement als Eingabe und fügen Sie Text elementTmpl wie folgt hinzu: <item name = "elementTmpl" xsi: type = "string"> ui / form / element / text </ item> Siehe: magento.stackexchange.com/a/296735/14271
Magento_Newbie

Antworten:

17

Versuchen Sie, den disabledParameter wie folgt zum Element hinzuzufügen :

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

Das Ergebnis sollte mit dem readonlyParameter für das reguläre Formularelement ähnlich sein :

Ergebnis

Siarhey Uchukhlebau
quelle
1
Ich bin hier verwirrt. es funktioniert, aber es sieht für mich falsch aus. Wenn das Feld deaktiviert ist, wie kommt es, dass es immer noch per POST gesendet wird? Auf jeden Fall ist dies eine andere Frage. Ich nehme das vorerst als selbstverständlich an.
Marius
5
@Marius Dies liegt höchstwahrscheinlich daran, dass beim Senden eines Formulars vom Backend nicht das tatsächliche Formular gesendet wird, sondern ein neues Formular mit ausgeblendeten Feldern, das beim Klicken auf Speichern erstellt wird. Das Formular wird gemäß den Feldern in Ihrer XML-Datei für UI-Komponenten und den mit gekennzeichneten Feldern erstellt data-form-part. Werfen Sie einen Blick auf module-ui/view/base/web/js/form/form.js::initConfig(), validate()und submit(). Schauen Sie sich auch an lib/mage/utils/misc.js::submit(). Diese zusammen fügen am Ende des tatsächlich eingereichten Textes ein neues Formular hinzu.
Giel Berkers
@GielBerkers. Nachdem ich diese Frage gestellt habe, habe ich einige Nachforschungen angestellt und bin zu dem gleichen Schluss gekommen, wie Sie es erklärt haben. Du hast recht. Die übermittelten Daten stammen nicht aus einem Formular.
Marius
Ich muss auch das gleiche Problem haben. Ich möchte das Preisfeld für ein konfigurierbares Produkt aktivieren. Hier habe ich den Link
Gopal Kacha
@Marius, Wie erstelle ich ein Feld disablednur in Bearbeitungsform, nicht in neuer Form?
Vinaya Maheshwari