Magento 2 динамическая строка ui компонент dont present data​​h1>

tal shulgin спросил: 10 мая 2018 в 04:48 в: magento2

Я пытаюсь создать динамическую структуру в форме администратора vs ui_component (xml).

для Пример: динамическая строка, которую я пытаюсь достичь

введите image description here

Я добавляю динамический компонент строки, и он выглядит как на изображении выше. После установки данных и сохранения данных данные успешно сохранены в db как форматированные JSON, но динамическая строка don 't вернуть данные после сохранения.

динамический компонент строки:

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

благодарит всех за вашу помощь.

1 ответ

tweetyx ответил: 03 июня 2018 в 02:43

Для этого вам нужно повторно ввести ту же информацию (здесь массив) в своем dataprovider, которая связана с вашей моделью, предопределенной в вашем файле my_form.xml.

Для меня мое имя контейнера - это ссылка matritix_advanceform на модуль cms_page (вы можете видеть в 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>
             ...

....

, чтобы информация была ссылкой на table cms_page.so я сохраняю его (с сериализацией) в той таблице, где мое имя поля "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;
}
}

Дополнительное видео по вопросу: Magento 2 динамическая строка ui компонент dont present data​​h1>

Михаил Молочко / Валерий Лазаревич. Воркшоп – Creating Frontend Grid in Magento 2

Creating Simple UI Component in Magento 2 - Max Pronko (4K)

Using View Model with UI Component in Magento 2 - Max Pronko (4K)