热更新layui的table单元格信息,无需重新加载网络请求


//定义要检测的字段,只有这些字段发生了变化才进行更新单元格
var deviceListCols = ["device_name","task_state","log_content"];
//记录原始的表格数据
var deviceListData = []

   table.render({
            elem: '#currentTableId',
            url: '/api/user/device/list',
            toolbar: '#toolbarDemo',
            height: 'full-50',
            defaultToolbar: ['filter', 'exports', 'print', {
                title: '提示',
                layEvent: 'LAYTABLE_TIPS',
                icon: 'layui-icon-tips'
            }],
            cols: [[
                {type: "checkbox", width: 50},
                {field: 'device_name',width: 150, title: '设备名称', edit:true, templet: '#device_name'},
                {field: 'task_state',  title: '当前任务', templet: '#task_state'},
                {field: 'log_content',  title: '脚本明细',templet: '#task_params'},
                {title: '操作', width: 140, toolbar: '#listMenu', align: "center"}
            ]],
            skin: 'line',
            //保存原始的数据
            done:function(res){
                deviceListData = res.data;
            }
        });
        


   //热更新layui table单元格信息
   //注意:如果表格使用了templet模版,则保证模版id和field一致
        function updateDeviceTable(newData,rows){
            for(var i=0;i<newData.length;i++){
                for(var j=0;j<deviceListData.length;j++){
                    if(newData[i].id == deviceListData[j].id){
                        //遍历所有字段
                        var row = 0;

                        for (var keyIndex=0;keyIndex<deviceListCols.length;keyIndex++){
                            var key = deviceListCols[keyIndex];
                            //比较字段是否发生改变
                            if(newData[i][key] != deviceListData[j][key]){
                                var index = i;
                                var $td = $("div[lay-id='currentTableId']").find("tr[data-index='"+index+"']").find("td[data-field='"+key+"']").find("div");
                                var tpl = $("#"+key);
                       			//获取该字段是否是模版
                                if(tpl != undefined){
                                	//重新渲染该模版
                                    var html = laytpl(tpl.html()).render(newData[i]);
                                    $td.html(html);
                                    deviceListData[j][key] = newData[i][key];
                                }else{
                                    $td.html(newData[i][key]);  
                                    deviceListData[j][key] = newData[i][key];  
                                }
                            }
                        }
						//额外的(假设你的模版里面用了其他字段,可以在此处追加)
						//但是模版的名字需要在这里提前写好
						//所以这个函数还不算完美。
                        for(var keyIndex in rows){
                            var key = rows[keyIndex];
       
                            if(newData[i][key] != deviceListData[j][key]){
                                console.log(key,"发生变动",i,j)
                                var index = i;
                                var field = "device_name";
                                var $td = $("div[lay-id='currentTableId']").find("tr[data-index='"+index+"']").find("td[data-field='"+field+"']").find("div");
                                var tpl = $("#"+field);
                                if(tpl != undefined){
                                    var html = laytpl(tpl.html()).render(newData[i]);
                                    $td.html(html);
                                    deviceListData[j][key] = newData[i][key];
                                    console.log("重新渲染",tpl.html(),newData[i]);
                                }else{
                                    $td.html(newData[i][key]); 
                                    deviceListData[j][key] = newData[i][key];
                                }
    
                            }

                        }
                      
                
                        console.log("-------")
                    }
                }
            }
        }

setInterval(function(){
     if(globalGroupId>0){
         $.get("/api/user/device/list?group_id="+globalGroupId,function(res){
             updateDeviceTable(res.data,['is_screen','is_charging','battery']);
         });
     }
 
 },1500);
        
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺离

创作不易,令君打赏,一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值