作为Kendo UI和Knockout的新手(3天!),我正在尝试将旧版Java小程序转换为Javascript。到目前为止,创建和绑定kendoGrid相对容易:
function JobViewModel(){ var self = this;
self.jobData = new ko.observableArray([]);
self.grdJobs = {
scrollable: true,
sortable: true,
filterable: false,
columnMenu: true,
resizable: true,
columns: [
{ title: "Job ID", field: "jobID" },
{ title: "Owner", field: "owner" },
{ title: "Description", field: "description" },
{ title: "State", field: "runState" },
{ title: "Start Time", field: "timeStart" },
{ title: "End Time", field: "timeEnd" },
{ title: "Elapsed Time", field: "timeElapsed" },
{ title: "Progress", field: "progress" },
{ title: "Agent", field: "agent" },
{ title: "Last Action", field: "lastAction" }
],
selectable: "single"
};
};
从服务器返回的数据是一组JSON对象(任意长度),如下所示(为简洁起见缩短):
[{0:1,2:3,4:5,...},{0:1,2:21,4:5,...},{0:1,2:23,4 :5,...}]
这个数字键/值对的数组映射到一个字典对象,其中数字键与字符串值配对,如:
{ 0:“状态” 1:“完成” 2:“工作ID” 3:“54759” 4:“所有者” 5:“约翰” ... 21:“54758” ... 23:“54757” ... }
我需要得到的是字典中与JSON对象数组相关的映射字符串。我尝试的方法是JSON.stringify(obj [i]),但后来我不确定我能用它做什么(也许在可以分配给kendoGrid的ko.observable中使用它?)无论如何,我是什么基于我上面显示的示例数据后,我是一个网格,其中列标题为“JOB ID”,“所有者”,“状态”和3行作业(54757,54758,54759),全部归John和State所有。结束。
我希望这一切都有道理。我想我真正需要的是如何获取JSON并将其转换为可以填充到Kendo Grid中的可用内容。感谢您帮助JS / JSON / Kendo / Knockout新手!
答案 0 :(得分:0)
您可以尝试使用可以使用的元素将这两个数组映射到另一个数组。
我做了一个简单的jsFiddle来证明这一点:jsFiddle
代码很简单:
var data = [{ 0: 1, 2: 3 }, { 0: 4, 2: 3 }];
var mapping = { 0: 'State', 1: 'Finished', 2: 'Owner', 3: 'John', 4: 'Pending' };
var realData = [];
$.each(data, function(index, obj) {
var arrayElem = {};
$.each(obj, function(key, value) {
arrayElem[mapping[key]] = mapping[value];
});
realData.push(arrayElem);
});