magento2 後臺Grid點擊column進行排序時會出現單個重複record

問題描述

本身開發與第三方module都出現一個問題,Grid的column排序點擊三次後會出現重複record,頭兩次會加載,第三次直接出現結果,因此能夠判斷是加載cache數據時出現問題。html

問題緣由

vendor/magento/module-ui/view/base/web/js/grid/data-storage.js
grid數據提取後會加到cache中,但只會保存一個id數據,而且默認id名是entity_id,因此使用的id不是entity_id則須要在ui component xml中額外指定,但大多數開發者會忽略這一點。web

參考如下數據源設置,cms的數據ID不是entity_id而是page_id,通常primaryFieldName節點不會設置錯,但storageConfig節點不設置不會出現明顯問題。ide

<!-- 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>
相關文章
相關標籤/搜索