2012-09-12 89 views
0

我试图创建级联下拉使用knockoutjs列表和以下数据来源:淘汰赛mappins儿童阵列

[{"$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":[]}] 

我试图映射此JSON到我的公司对象使用knockoutjs映射插件:

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

但似乎摄像机阵列没有映射。你能告诉我为什么会发生这种情况?谢谢。

回答

0

使用公司将对象包装为对象,因为关键应该使您的代码正常工作。

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

看到此fiddle(在输入框变更值示出了相机阵列被映射)。