ui-componentsを使用してフォームフィールドを読み取り専用にする方法は?


10

私のMagento 2モジュールには、フォームフィールドのこのuiコンポーネント定義があります。

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

configセクションに、しかし私は明らかに失敗しました。
フィールドを読み取り専用にするにはどうすればよいですか?フィールドを読み取り専用にできますか?


「無効」と「読み取り専用」のパラメーターの違いは何ですか?私の意見では、両方のパラメーターは同じように機能します。
Siarhey Uchukhlebau

1
私が知っていることから、無効はフィールドがポスト経由で送信されず、読み取り専用が送信されることを意味します。私の計画は、いくつかのJavaScriptを介して読み取り専用フィールドの値を変更することです。
マリウス

もちろん、(uiではなく)通常のmagento形式では、「readonly」属性は「無効」なHTML属性を意味します。別の方法では、カスタムコンポーネントまたはカスタムスクリプトを使用する必要があります。ui-componentsには「readonly」属性が存在しないためです。
Siarhey Uchukhlebau

私は今あなたの答えに固執するつもりです。将来、実際にフィールドを無効にする必要がないことを願っています。
マリウス

formElementを入力のままにして、テキストelementTmplを次のように追加します<item name = "elementTmpl" xsi:type = "string"> ui / form / element / text </ item>参照:magento.stackexchange.com/a/296735/14271
Magento_Newbie

回答:


17

次の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これは、フォームがバックエンドから送信されるときに送信されるのは実際のフォームではなく、[保存]をクリックすると作成される非表示フィールドを持つ新しいフォームであるためです。フォームは、UIコンポーネントXMLファイルのフィールドとでマークされたフィールドに従って作成されますdata-form-part。見てみましょうmodule-ui/view/base/web/js/form/form.js::initConfig()validate()submit()。も見てくださいlib/mage/utils/misc.js::submit()。これらを組み合わせると、実際に送信される本文の最後に新しいフォームが追加されます。
Giel Berkers 2017年

@GielBerkers。私はこの質問をした後にいくつかの調査を行いましたが、あなたが説明したのと同じ結論に達しました。あなたが正しいです。送信されたデータはフォームからのものではありません。
マリウス

私も同じように問題がなければなりません。構成可能な製品の価格フィールドを有効にしたいのです。ここでリンク
Gopal Kacha

@Marius、disabled編集フォームでのみフィールドを新規フォームではなく作成するにはどうすればよいですか?
Vinaya Maheshwari 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.