Javascript 更新由远程数据填充的剑道网格列的值

Javascript 更新由远程数据填充的剑道网格列的值,javascript,jquery,kendo-ui,kendo-grid,Javascript,Jquery,Kendo Ui,Kendo Grid,我有一个剑道网格,在页面加载时立即呈现。网格由远程数据填充 logMonitoringGrid.kendoGrid({ dataSource: { batch: true, transport: { read: { url: window.$vars['webApiHost'] +

我有一个剑道网格,在页面加载时立即呈现。网格由远程数据填充

 logMonitoringGrid.kendoGrid({
                dataSource: {
                    batch: true,
                    transport: {
                        read: {
                            url: window.$vars['webApiHost'] + "logs",
                            dataType: "json",
                        }
                    },
                    serverFiltering: false,
                    serverPaging: false,
                    schema: {
                        model: {
                            id: "Id",
                            fields: {
                                Id: { type: "number" },
                                TTId: { type: "string" },
                                LUId: { type: "number" },
                                Level: { type: "string" },
                                Server: { type: "string" },
                                Thread: { type: "number" },
                                Message: { type: "string" },
                                Ip: { type: "string" },
                                RId: { type: "string" },
                                Timestamp: { type: "date" }
                            }
                        }
                    }
                },
                columns: columnObjects
            });

var lGrid = logMonitoringGrid.data("kendoGrid");
还有另一个API,它包含所有租户的数据(JSON)

我需要用相应的租户名称替换网格每一行的租户Id。网格的远程数据不发送任何租户名称。这就是我创建所有租户ID及其名称的映射的原因

 var tenantData = new kendo.data.DataSource({
                transport: {
                    read: {
                        beforeSend: function (xhr) {
                            o9Util.setRequestHeaders(xhr);
                        },
                        url: crudUrl("tenants"),
                        dataType: "json"
                    }
                }
            });

            var myMap = new Map();

            tenantData.fetch(function () {
                var data = tenantData.data();
                for (var i = 0; i < data.length; i++) {
                    myMap.set(data[i].Id, data[i].Name);
                }
            })
var tenantData=new kendo.data.DataSource({
运输:{
阅读:{
发送前:函数(xhr){
o9Util.setRequestHeaders(xhr);
},
url:crudUrl(“租户”),
数据类型:“json”
}
}
});
var myMap=newmap();
tenantData.fetch(函数(){
var data=tenantData.data();
对于(变量i=0;i
现在我要像这样更新网格列

lGrid.dataSource.fetch(function () {
                var data = this.data();
                for (var i = 0; i < data.length; i++) {
                    for (var [key, value] of myMap.entries()) {
                        if (parseInt(data[i].TTId) === key) {
                            data[i].set("TTId", value);
                        }
                    }
                }
            })
lGrid.dataSource.fetch(函数(){
var data=this.data();
对于(变量i=0;i

这种方法可以工作,但在页面加载时更改列的值需要一些时间。此外,页面在一段时间后变得无响应。有没有其他方法可以在页面加载后立即更新网格?

A建议如下:

  • 在Kendo调用之前调用API(租户)。记住在请求完成时初始化网格,这意味着打开

  • 初始化你的网格

  • 在网格中设置所需的值。例如:

    logMonitoringGrid.kendoGrid({
        dataSource: {
            schema: {
                parse: function(data) {
                    let tenantJsonData = tenantData.data().toJSON();
    
                    data.forEach(item => {
                        let tenantItem = tenantJsonData.find(ti => ti.Id === item.TTId);
    
                        if (tenantItem) {
                            item.TTTId = tenantItem.Name;
                        }
                    });
    
                    return data;
                }
            }
        }
     }
    

  • 我没有测试它,但它应该可以工作。

    A建议如下:

  • 在Kendo调用之前调用API(租户)。记住在请求完成时初始化网格,这意味着打开

  • 初始化你的网格

  • 在网格中设置所需的值。例如:

    logMonitoringGrid.kendoGrid({
        dataSource: {
            schema: {
                parse: function(data) {
                    let tenantJsonData = tenantData.data().toJSON();
    
                    data.forEach(item => {
                        let tenantItem = tenantJsonData.find(ti => ti.Id === item.TTId);
    
                        if (tenantItem) {
                            item.TTTId = tenantItem.Name;
                        }
                    });
    
                    return data;
                }
            }
        }
     }
    
  • 我没有测试它,但它应该可以工作