我正在尝试将json对象转换为knockout.js中的可观察数组。一切都运行良好,但每当我得到console.log我的数组时,它会返回一个函数。
这里有以下代码......
var jsondata = ko.mapping.toJSON(data);
self.A1 = ko.mapping.fromJSON(jsondata);
console.log(A1.org()[0].suborg()[0].orgactivities()[0]);
我明白了:
我的JSON遵循以下格式..
任何方法让控制台记录我的值的正确输入?我将()s放在我的代码中,但它仍然无法正常工作。欢迎任何帮助。
答案 0 :(得分:2)
如果您的数据是JSON字符串:您可以使用函数ko.mapping.fromJSON
创建视图模型。
如果您的数据已经映射以取消映射:您可以使用ko.mapping.toJSON
我不确定您先使用ko.mapping.toJSON
的原因。 ?!!
由于您的数据显示为序列化的JSON,因此以下代码将起作用。
示例:https://jsfiddle.net/kyr6w2x3/59/
var jsondata ={
"org":[
{
"orgname":"name",
"suborg":[
{
"nameofsuborg":"nameofsuborg",
"orgactivities":"activityName"
}
]
}
]
}
function AppViewModel() {
var self = this;
self.A1 = ko.mapping.fromJS(jsondata);
console.log(self.A1.org()[0].orgname())
console.log(self.A1.org()[0].suborg()[0].nameofsuborg());
console.log(self.A1.org()[0].suborg()[0].orgactivities());
}
ko.applyBindings(new AppViewModel());
答案 1 :(得分:1)
您应该使用ko.utils.unwrapObservable
。你可以明显选择你想要开始展开的任何级别。但是,如果您希望底层对象是用于记录以外的目的的POJO,则应使用ko.mapping.fromJSON
的第2个参数手动进行映射,您可以阅读here。
这与你的问题只是切线相关,但你应该知道还有另一个表现更好的映射插件(我注意到你的结构看起来可能非常大):knockout.viewmodel