KnockOut可观察阵列打印功能而不反映值

时间:2016-08-25 23:13:59

标签: knockout.js

我正在尝试将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]);

我明白了:

enter image description here

我的JSON遵循以下格式..

enter image description here

任何方法让控制台记录我的值的正确输入?我将()s放在我的代码中,但它仍然无法正常工作。欢迎任何帮助。

2 个答案:

答案 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