ko.toJS将Array转换为Object

时间:2014-07-22 14:30:35

标签: javascript knockout.js

我们在我们的应用程序中大量使用knockout.js,但已经遇到了新的情况。它围绕ko.toJSON,但它似乎是造成问题的基础ko.toJS

我们有一个具有许多属性的对象,其中一个属性是其他对象的数组。在通过ko.toJS运行它之后,它成为一个对象,每个属性都给出了原始索引的名称。我无法在测试代码中复制它 - 实际上ko.toJS在我的其他测试中将数组正确地保存为数组。

ko.toJS错误并将其转换为对象的示例:

enter image description here

ko.toJS正确的示例,并将其保留为数组:

enter image description here

关于为什么ko.toJS可能会导致这个或者下一步看什么的任何想法都会受到赞赏...!

更新

当使用knockout的调试版时,这是它报告传入mapJsObjectGraph的数组的方式:

enter image description here

1 个答案:

答案 0 :(得分:4)

这是淘汰赛中的一个错误。一个issue has already been opened

解决方法是更改​​上面提到的函数mapJsObjectGraph:

中的行
var outputProperties = rootObject instanceof Array ? [] : {};

到此:

var outputProperties = toString.call(rootObject) === "[object Array]" ? [] : {};

根据错误报告,似乎这不是instanceof在敲门中使用的唯一地方。