3

JSONを渡してノックアウトして表示しようとしていますが、最初のいくつかの要素についてはうまくいきました。ただし、ネストされたオブジェクトに問題があります。私が達成しようとしているのは、A1、A2、A3 / B1、B2、B3 ..のそれぞれの desc フィールドと value フィールドを表示することです。

私は百万の例を見て、さまざまなバージョンを試しましたが、マッピングがどのように機能するかまだわかりません.

助けてくれて本当にありがとうございます。

JS:

function jsonSubsetModel (desc,value){
    var self = this;
    self.desc = ko.observable(desc);
    self.value = ko.observable(value);
    }


    var myModel = function(){
        var jsonUrl = '/myjson.json';
        var self = this;
        var mapped = {};

        //Data
        self.date = ko.observable();
        self.time = ko.observable();

        self.set1 = ko.observableArray([]);
        self.set2 = ko.observableArray([]);



    $.getJSON(jsonUrl,function (data) {     
    self.date(data.Date);
    self.time(data.Time);   
    self.img(data.ImgURL);

    mapped = ko.mapping.fromJS(data);
    self.set1(mapped.SET1);
    self.set2(mapped.SET2);             
    });

    };  

    ko.applyBindings(new myModel());    

HTML:

<!-- This works -->
    <span data-bind="text: date"></span><br>
    <span data-bind="text: time"></span><br>
    <span data-bind="text: img"></span><br>

<!-- This doesn't -->    
    <p data-bind = "foreach:{data: set1, as:'subset'}">
    <span data-bind="text: subset.desc"></span>
    <span data-bind="text: subset.value"></span>    
    </p>

JSON:

{    
"Date":"21/02/2013",
"Time":"13:55",    
"SET1": {       
            "A1":{          
            "desc":"descA1",
            "value":"30",               
            },
            "A2":{          
            "desc":"descA2",
            "value":"30",
            },
            "A3":{          
            "desc":"descA3",
            "value":"30",
            }                                           
    },

    "SET2": {       
            "B1":{          
            "desc":"descA1",
            "value":"30",
            },
            "B2":{          
            "desc":"descA1",
            "value":"30",
            },
            "B3":{          
            "desc":"descA1",
            "value":"30",
            }                       
    }
}
4

1 に答える 1

3

knockout.js foreach動作しArrayます。あなたが提供しているのはオブジェクトです。オブジェクトを次のように変更します。

"SET1": [      
            {          
            "desc":"descA1",
            "value":"30",               
            },
            {          
            "desc":"descA2",
            "value":"30",
            },
            {          
            "desc":"descA3",
            "value":"30",
            }                                           
    ],
于 2013-02-12T11:58:08.103 に答える