如何使用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>  

到配置部分,但显然我失败了。
如何使该字段为只读?我可以将字段设为只读吗?


参数“已禁用”和“只读”之间有什么区别?我认为这两个参数的工作方式相似。
Siarhey Uchukhlebau

1
据我所知,disabled表示字段不是通过post发送的,而readonly是发送的。我的计划是通过一些JavaScript修改readonly字段的值。
马里乌斯

可以,但是采用常规的magento形式(非ui),“ readonly”属性表示html属性“ disabled”。以其他方式,您应该使用自定义组件或自定义脚本,因为ui组件不存在“ readonly”属性。
Siarhey Uchukhlebau,2016年

我现在要坚持你的回答。我只是希望我将来实际上不必将某个字段禁用。
马吕斯

保留formElement作为输入,并添加文本elementTmpl这样的<item name =“ elementTmpl” xsi:type =“ string”> ui / form / element / text </ item>参考:magento.stackexchange.com/a/296735/14271
Magento_Newbie

Answers:


18

尝试将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

@GielBerkers。提出这个问题后,我做了一些研究,得出的结论与您解释的相同。你是对的。提交的数据不是来自表单。
马里乌斯

我也必须同样喜欢这个问题。.我想为可配置产品启用价格字段。.在这里,我解释了链接
Gopal Kacha

@Marius,如何使字段disabled仅以编辑形式而不是新形式?
Vinaya Maheshwari
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.