问题描述
自己开发与第三方module都出现一个问题,Grid的column排序点击三次后会出现重复record,头两次会加载,第三次直接出现结果,所以可以判断是加载cache数据时出现问题。
问题原因
vendor/magento/module-ui/view/base/web/js/grid/data-storage.js
grid数据提取后会加到cache中,但只会保存一个id数据,并且默认id名是entity_id,所以使用的id不是entity_id则需要在ui component xml中额外指定,但大多数开发者会忽略这一点。
参考以下数据源设置,cms的数据ID不是entity_id而是page_id,一般primaryFieldName节点不会设置错,但storageConfig节点不设置不会出现明显问题。
<!-- vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml -->
<dataSource name="cms_page_listing_data_source">
<argument name="dataProvider" xsi:type="configurableObject">
<argument name="class" xsi:type="string">Magento\Cms\Ui\Component\DataProvider</argument>
<argument name="name" xsi:type="string">cms_page_listing_data_source</argument>
<argument name="primaryFieldName" xsi:type="string">page_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">page_id</item>
</item>
</item>
</argument>
</argument>
</dataSource>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。