Сетка пользовательского интерфейса Magento2.1, удалить или снять проблему фильтра (после удаления фильтра строка результатов применяется ко всей коллекции)

12

Я создал пользовательскую сетку в magento 2.1.0 и столкнулся с проблемой при удалении фильтров или очистке всех фильтров из пользовательской сетки. Мой отфильтрованный результат занимает всю сетку, то есть после удаления фильтра повторяется одна и та же строка во всей сетке .

Я выясняю, почему эта проблема возникает, но не могу решить эту проблему.

Проблема возникает из-за того, что запрос get mui / index / render не срабатывает при удалении фильтра или очистке всего фильтра.

Фактически это работало, когда применено 2 или более фильтров, и я удаляю их, но не в случае последнего примененного фильтра.

Раджниш Гупта
источник
Это происходит из-за специального кэширования для 1-го активного прикладного фильтра. Пожалуйста, дайте мне какие-либо предложения по решению этой проблемы.
Раджниш Гупта

Ответы:

22

Просто чтобы добавить к предыдущему решению. Конкретным исправлением является добавление элемента storageConfig. Если этого не произойдет, вы увидите проблему, при которой данные строк дублируются.

<item name="storageConfig" xsi:type="array">
    <item name="indexField" xsi:type="string">entity_id</item>
</item>

Где «entity_id» - ваш первичный ключ для данных сбора, а также такой же, как определено в

<argument name="primaryFieldName" xsi:type="string">entity_id</argument>

И следующее может быть удалено полностью. Поскольку это просто дублирование значения, указанного уже в узле dataProvider.

<argument name="data" xsi:type="array">
    <item name="js_config" xsi:type="array">
        <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
    </item>
</argument>
Крис
источник
да, вы правы, это работает сейчас
Раджниш Гупта
Приветствую ваше решение :) +1 от меня
Кейур Шах
13

у меня была та же проблема, и я решаю с этим кодом в ui_component xml:

<dataSource name="storelocator_store_listing_data_source">
    <argument name="dataProvider" xsi:type="configurableObject">
        <argument name="class" xsi:type="string">StoreGridDataProvider</argument>
        <argument name="name" xsi:type="string">storelocator_store_listing_data_source</argument>
        <argument name="primaryFieldName" xsi:type="string">store_id</argument>
        <argument name="requestFieldName" xsi:type="string">id</argument>
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
                <item name="update_url" xsi:type="url" path="mui/index/render"/>
                <item name="storageConfig" xsi:type="array">
                    <item name="indexField" xsi:type="string">store_id</item>
                </item>
            </item>
        </argument>
    </argument>
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
        </item>
    </argument>
</dataSource>

Посмотрите на имя узла «DataProvider». Надеюсь, поможет

Тони Бартилоро
источник
2
Да, это сработало, спасибо большое, Тони :)
Раджниш Гупта
спасибо @ Тони, ты сэкономил мое время, работая отлично, так что + голосуй
Нагараджу К
7

У меня та же проблема на Magento 2.3 и решена с помощью следующего кода в ui_component xml.

<dataSource component="Magento_Ui/js/grid/provider" name="listing_data_source">
        <settings>
            <storageConfig>
                <param name="indexField" xsi:type="string">primary_id</param>
            </storageConfig>
            <updateUrl path="mui/index/render"/>
        </settings>
        ...
        ...
</dataSource>
Аасим Гория
источник
Можете ли вы сказать мне, где вы это исправили?
Сандер ван
1
@Aasim Goriya, у меня тоже возникла такая же проблема, добавил твой код. Теперь фильтры работают нормально. Спасибо, вы сэкономили мое время.
Балу
1
@DhadukMitesh что вы подразумеваете под фильтром по умолчанию? не могли бы вы объяснить больше?
Асим Гория
1
@DhadukMitesh хорошо, так что ваша проблема в том, что при сбросе фильтра ваша сетка не показывает все значения правильно?
Аасим Гория
1
@DhadukMitesh Я не думаю, что это возможно, так как данные сетки Magento сохраняются в таблице ui_bookmark, а когда вы фильтруете данные, они сохраняются в ui_bookmark, поэтому невозможно сбросить фильтр до тех пор, пока данные не изменятся в таблице ui_bookmark, поэтому вам нужно удалить записи таблицы ui_bookmark при загрузке вашей страницы.
Асим Гория