Knockout.js映射插件是否可以访问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);
});发布于 2013-05-03 05:51:43
我使用了自己开发的单向递归映射函数。它对我来说工作得很好,而且它很小。
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,它可以被重写。
发布于 2013-05-03 05:53:44
您确定不能访问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);https://stackoverflow.com/questions/16348091
复制相似问题