1

作为 Kendo UI 和 Knockout 的新手(3 天!),我正在尝试将旧版 Java 小程序转换为 Javascript。到目前为止,创建和绑定 kendoGrid 相对容易:

函数 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”、“Owner”和“State”的网格和 3 行作业(54757、54758、54759),所有这些都归 John 和 State完成的。

我希望这一切都有意义。我想我真正需要的是如何获取 JSON 并将其转换为可以填充到 Kendo Grid 中的可用内容。感谢您帮助 JS/JSON/Kendo/Knockout 新手!

4

1 回答 1

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);
});
于 2013-03-07T07:47:01.430 回答