0

私は、knockoutjsと次のデータソースを使用してドロップダウンリストをカスケードするように作成しようとしています。

[{"$id":"1",
  "Id":1,
  "Name":"Nikon",
  "Cameras":[{
       "$id":"2",
       "Id":1,
       "Name":"D90"},
      {"$id":"3",
       "Id":2,
       "Name":"D5100"},
      {"$id":"4",
       "Id":3,
       "Name":"D700"}]},
 {"$id":"5",
  "Id":2,
  "Name":"Canon",
  "Cameras":[{
       "$id":"6",
       "Id":4,
       "Name":"550D"},
      {"$id":"7",
       "Id":5,
       "Name":"600D"},
      {"$id":"8",
       "Id":6,
       "Name":"650D"}]},
 {"$id":"9",
  "Id":3,
  "Name":"Sony",
  "Cameras":[]},
 {"$id":"10",
  "Id":4,
  "Name":"Pentax",
  "Cameras":[]},
 {"$id":"11",
  "Id":5,
  "Name":"Olympus",
  "Cameras":[]},
 {"$id":"12",
  "Id":6,
  "Name":"Panasonic",
  "Cameras":[]},
 {"$id":"13",
   "Id":7,
   "Name":"Leica",
   "Cameras":[]}]

knockoutjsのマッピングプラグインを使用して、このjsonを会社のオブジェクトにマッピングしようとしています。

$.getJSON(url, function (data) {
      $.each(data, function () {
        companies.push(ko.mapping.fromJS(this));
      });
});

しかし、Cameras配列はマップされていないようです。なぜこれが起こっているのか教えていただけますか?ありがとう。

4

1 に答える 1

0

会社をキーとして使用してリストをオブジェクトにラップすると、コードが機能するはずです。

var Model = function () {
   this.companies= ko.observableArray();        
};
var model = new Model();
ko.applyBindings(model);
ko.mapping.fromJS({companies: data}, mappingOptions, model);

このフィドルを参照してください(入力ボックスの値を変更すると、Cameras配列がマップされていることがわかります)。

于 2012-09-13T12:20:11.257 に答える