Компонент пользовательского интерфейса динамической строки magento 2 не представляет данные - PullRequest
0 голосов
/ 03 июня 2018

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

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

enter image description here

Я добавляю динамический компонент строки, и это выглядит так, как на рисунке выше.После установки данных и сохранения данных данные успешно сохраняются в БД в формате JSON, но динамическая строка не возвращает данные после сохранения.

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

<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 Ответ

0 голосов
/ 26 июня 2018

Для этого вам нужно повторно внедрить ту же информацию (здесь массив) в ваш поставщик данных, который связан с вашей моделью, предопределенной в вашем 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>
             ...

....

, поэтому информация является ссылкой на таблицу cms_page.поэтому я сохраняю его (с помощью serialize) в той таблице, где мое поле имеет имя «matritix_advanceform», и я загружаю его с помощью десериализации, поэтому результат в hard такой, как у моего поставщика данных:

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;
}
}
...