2

我正在尝试以管理表单 vs ui_component(xml) 创建动态行。

例如:我试图实现的动态行

在此处输入图像描述

我添加了动态行组件,它看起来像上图。设置数据并保存数据后,数据成功以JSON格式保存在db中,但动态行保存后没有取回数据。

动态行组件:

<dynamicRows name="Params" sortOrder="1" >
    <settings>
        <addButtonLabel translate="true">Add Value</addButtonLabel>
        <additionalClasses>
            <class name="admin__field-wide">false</class>
        </additionalClasses>
        <componentType>dynamicRows</componentType>
        <dndConfig>
            <param name="enabled" xsi:type="boolean">false</param>
        </dndConfig>
    </settings>
    <container name="record" component="Magento_Ui/js/dynamic-rows/record">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="isTemplate" xsi:type="boolean">true</item>
                <item name="is_collection" xsi:type="boolean">true</item>
                <item name="component" xsi:type="string">Magento_Ui/js/dynamic-rows/record</item>
                <item name="componentType" xsi:type="string">container</item>
                <item name="dataScope" xsi:type="string">data.row</item>
            </item>
        </argument>
        <field name="name" formElement="input">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="dataScope" xsi:type="string">name</item>
                    <item name="fit" xsi:type="boolean">false</item>
                    <item name="label" xsi:type="string" translate="true">NAME</item>
                    <item name="dataType" xsi:type="string">text</item>
                </item>
            </argument>
        </field>
        <field name="value" formElement="input">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="prefixName" xsi:type="string">value</item>
                    <item name="prefixElementName" xsi:type="string">option_</item>
                    <item name="dataScope" xsi:type="string">value</item>
                    <item name="fit" xsi:type="boolean">false</item>
                    <item name="label" xsi:type="string" translate="true">VALUE</item>
                    <item name="dataType" xsi:type="string">text</item>
                </item>
            </argument>
        </field>
        <actionDelete name="action_delete">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="fit" xsi:type="boolean">true</item>
                    <item name="prefixElementName" xsi:type="string">option_</item>
                    <item name="prefixName" xsi:type="string">Params.delete</item>
                    <item name="dataType" xsi:type="string">text</item>
                </item>
            </argument>
            <settings>
                <dataType>text</dataType>
                <componentType>actionDelete</componentType>
            </settings>
        </actionDelete>
    </container>
</dynamicRows>

感谢你的帮助。

4

1 回答 1

1

为此,您需要在与 my_form.xml 中预定义的模型链接的数据提供者中重新注入相同的信息(此处为数组)。

对我来说,我的容器名称是指向模块 cms_page 的 matritix_advanceform 链接(您可以在 view/adminhtml/ui_component/cms_page_form.xml 中看到)所以:

<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">cms_page_form.page_form_data_source</item> here
        </item> 
    </argument>
    <settings> 
        <namespace>cms_page_form</namespace>
        <dataScope>data</dataScope>
        <deps>
            <dep>cms_page_form.page_form_data_source</dep>
        </deps>
    </settings>
    <dataSource name="page_form_data_source">
        <argument name="data" xsi:type="array">
            <item name="js_config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/form/provider</item>
            </item>
        </argument>
        <settings>
            <submitUrl path="cms/page/save"/>
        </settings>
        <dataProvider class="Magento\Cms\Model\Page\DataProvider" name="page_form_data_source"> here
            <settings>
                <requestFieldName>page_id</requestFieldName>
                <primaryFieldName>page_id</primaryFieldName>
            </settings>
        </dataProvider>
    </dataSource>
    <container name="matritix_advanceform">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/dynamic-rows/dynamic-rows</item>
             ...

……

所以信息是表cms_page的链接。所以我将它(使用序列化)保存在我的字段名称为“matritix_advanceform”的表中,并使用反序列化加载它,所以在我的数据提供程序中,结果是这样的:

class DataProvider extends \Magento\Cms\Model\Page\DataProvider
{
  public function getData()
    {
...
    $matritix_advanceform = array (
    0  => array("myinput_text" => "test", "record_id" => "0"));

        $this->loadedData[$page->getId()]['matritix_advanceform'] = $matritix_advanceform;

...
return $this->loadedData;
}
}
于 2018-06-26T16:17:59.400 回答