У меня есть сетка кендо, которая отображается при загрузке страницы. Сетка заполняется удаленными данными.
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: 5196
Name: "unittest"
ContactEmail: "admin@unittest.com"
Theme: "default"
DefaultLocale: "en-US"
IsInternal: false
}
Мне нужно заменить идентификатор арендатора каждой строки сетки на их соответствующие имена арендаторов. Удаленные данные сетки не отправляют имена арендаторов вместе с ним. Вот почему я создаю карту всех идентификаторов арендаторов и их имен.
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);
}
})
Теперь я обновляю столбец сетки следующим образом:
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);
}
}
}
})
Этот подход работает, но требует некоторых время менять значения столбца при загрузке страницы. Более того, страница через некоторое время перестает отвечать. Есть ли другой способ обновить сетку, как только страница загрузится?