layui中关于table表格reload后有缓存问题的解决办法

问题描述:我在父窗口的table中的数据渲染方式不是异步请求后端,而是直接从后端加载数据,渲染到模板的时候直接渲染的,也就是下图中的data:tableDatas,如下图:

//表格渲染
table.render({
    elem: '#mytable',
    text: {
        none: '暂无相关数据'
    },
    data:tableDatas,
    id: 'reloadParentData',
    totalRow:true,//开启合计行
    page: false,//分页
    limit:Number.MAX_VALUE,
    defaultToolbar: [], //隐藏排版图标,默认值:['filter', 'print', 'exports']
    done: function(res, curr, count){

    },
    cols: [[ //表头
        {field: 'goods_name', title: '商品名称', width:200,fixed:'left'}
        ,{field: 'goods_number', title: '商品编号',width:100,fixed:'left'}
    ]]
});

在父窗口的table中我有一个删除操作,可以删除每一行的数据,这里我先把父窗口中的所有行的数据都删除了。然后我使用layer.open打开一个子窗口,在子窗口中拼接父窗口的数据,最后在子窗口中实现父窗口的reload重载,此时问题出现了,父窗口reload后,发现之前已经删除的数据又被重新加载进来了,即父窗口中有一个table.cache属性存放的旧数据的缓存,我们可以console.log查看。

解决方法:知道了这个原因,我度娘找了好多别人的解决方案,也都试了,但是都没啥用。然后我自己冷静下来想了想,别人的方法都是按如何清除缓存这个方向去,既然这个方向行不通,那么是否可以另辟蹊径达到目的呢?答案显然是可以的,解决方法其实很简单,在子窗口操作父窗口的reload时,在done中只要加入一行代码,问题即可得到解决,具体如下图代码所示:

//父窗口table重载数据
parent.table.reload('reloadParentData', {
    data: datas,
    done: function(res, curr, count){
        this.data = datas; //非常重要,不然会出现bug
    },
});

 注:datas是子窗口中拼接的父窗口的数据。

就一行this.data = datas;问题解决。

你可能感兴趣的:(layui)