2013-03-07 108 views
1

對於Kendo UI和Knockout(3天!)非常新穎,我試圖將遺留Java applet轉換爲Javascript。到目前爲止,創建和綁定kendoGrid相對比較簡單:使用JSON對象填充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」,「所有者」和「狀態」以及全部由John和State擁有的3行作業(54757,54758,54759)成品。

我希望這一切都有意義。我想我真正需要的是如何把JSON轉換成可用於Kendo網格的可用內容。感謝您幫助JS/JSON/Kendo/Knockout新手!

回答

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); 
}); 
+0

那一定幫助。我的數據和映射比較複雜一點,因爲我永遠不會知道數據對象數組有多長,甚至不知道映射對象中有多少個字段,但這是朝正確方向邁出的一步。非常感謝你的幫助! – user2030159 2013-03-08 17:53:24