1

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 で使用する可能性がありますか?)上記のサンプル データに基づいて作成したのは、「ジョブ ID」、「所有者」、「状態」という列ヘッダーと、3 行のジョブ (54757、54758、54759) を持つグリッドで、すべてジョンと州が所有しています。終了した。

これがすべて理にかなっていることを願っています。私が本当に必要としているのは、JSON を取得して、Kendo Grid に入力できる使用可能なものに変換する方法だと思います。JS/JSON/Kendo/Knockout 初心者を助けてくれてありがとう!

4

1 に答える 1

0

使用できる要素を持つ別の配列に、これら 2 つの配列をマップすることができます。

これを示すために、簡単な 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 に答える