Knockout.js Mapping插件是否可以访问json嵌套数据,还是只能找到第一级数据?
如果映射插件无法访问嵌套数据还有其他解决方案吗?
在我的示例中,“Number”正确映射但“DueDate”不会映射。
// json with nested data
{
"Level1":[
{
"Level2":{
"DueDate":"\/Date(1362124800000)\/",
},
"Number":5499
},
}
// Here's my data model - I need to map the "DueDate" observable.
var viewModel;
$.getJSON('/myJsonData', function (data) {
viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
});
答案 0 :(得分:1)
我使用了自己种植的单向递归映射函数。它对我来说效果很好,而且很小。
function convertToObservable(obj) {
var newObj = {},
key,
value;
if (!$.isPlainObject(obj)) {
return obj;
}
for (key in obj) {
if (obj.hasOwnProperty(key)) {
value = obj[key];
// console.log(key + ':', value);
newObj[key] = $.isArray(value)
? ko.observableArray($.map(value, convertToObservable))
: $.isPlainObject(value) ? convertToObservable(value) : ko.observable(value);
}
}
return newObj;
}
它依赖于jQuery,但如果不使用jQuery则可以重写。
答案 1 :(得分:1)
您确定无法访问DueDate吗? 因为在fiddle我可以。
// json nested data
var data = {
"Level1": [{
"Level2": {
"DueDate": "\/Date(1362124800000)\/",
},
"Number": 5499
}]
};
var viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
var dueDate = viewModel.Level1()[0].Level2.DueDate;
alert(typeof dueDate);