ko.toJS 将数组转换为对象

Jam*_*rpe 3 javascript knockout.js

我们在应用程序中大量使用 Knockout.js,但遇到了新的场景。它围绕,但似乎是导致问题的ko.toJSON底层。ko.toJS

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

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

在此输入图像描述

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

在此输入图像描述

任何关于为什么ko.toJS可能导致这种情况或下一步要看什么的想法都值得赞赏......!

更新

当使用淘汰赛的调试器版本时,它是如何报告数组被传递到mapJsObjectGraph的:

在此输入图像描述

Jam*_*rpe 6

这是淘汰赛中的一个错误。一个问题已经被提出

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

var outputProperties = rootObject instanceof Array ? [] : {};
Run Code Online (Sandbox Code Playgroud)

对此:

var outputProperties = toString.call(rootObject) === "[object Array]" ? [] : {};
Run Code Online (Sandbox Code Playgroud)

instanceof根据错误报告,这似乎并不是淘汰赛中唯一使用的地方。