1

サーバーから複雑な JSON を受け取ります。次のようにします。

var data = [{
    name: "name1",
    items:[
        {
        name:"name11",
        subItems:[{
                name:"name111",
                children[
                    {id:1,name:"child1111",status:"good"},
                    {id:2,name:"child1112",status:"bad"},
                    {id:3,name:"child1113",status:"good"}
                ]},
                {
                name:"name112",
                children[
                    {id:4,name:"child1121",status:"good"}]
                }]
        },
        {
        name:"name12",
        subItems:[{
                name:"name121",
                children[
                    {id:5,name:"child1211",status:"bad"}]
                }]
        }]
    },
    {
    name: "name2",
    items:[
        {
        name:"name21",
        subItems:[{
                name:"name111",
                children[
                {id:7,name:"child2111",status:"good"}
                ]}]
        }]
    }];

そのため、それぞれに名前と項目のプロパティが含まれるオブジェクトのリストがあります。Items は、それぞれが name プロパティと subItems プロパティを含むオブジェクトの同様のリストのプロパティです。subItems プロパティは前と同じで、name プロパティと children プロパティがあります。children は私のエンティティのリストです。ViewModel を埋めるためにマッピングを使用します。まずid、エンティティでキーとして設定する方法をイメージできません。私はそれに「飛び込む」方法を考えています。さらに、エンティティを拡張する必要があります。次の例のように計算プロパティを追加します。

computProp: ko.computed(function() {return name+status;})

この場合、マッピングの利点が見られないため、js クラスを作成したくありません。この場合、手動マッピングを実装できます。私にとってはより明確になるでしょう。

したがって、どんなアイデア、提案、または批評家も大歓迎です。

PS: 同様のトピックを検索したり読んだことがあります

4

1 に答える 1

1

この動作を実現するには、子のviewmodelを明示的に宣言する必要がありますが、それでもすべてのマッピングを実行することでメリットが得られます。

http://jsfiddle.net/uXMhA/

ChildViewModel = function(data) {
    ko.mapping.fromJS(data, {}, this);
    this.computProp = ko.computed(function() {
        return this.name() + this.status();
    }, this);
};
于 2013-01-25T23:20:18.570 に答える