Knockout.js 在具有空字符串的数组上使用fromJS将用false替换这些字符串
映射下面的对象时,数组中的空Knockout.js 在具有空字符串的数组上使用fromJS将用false替换这些字符串,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,映射下面的对象时,数组中的空“值在可观察数组中映射为false: var d2 = { "values": [{"9", false, "", true, null, "", "", ""] }; var viewmodel2 = ko.mapping.fromJS(d2); 当使用ko.mapping.toJSON(viewmodel2)映射回json时这是结果: { "values": [ "9", false, false, true,
“
值在可观察数组中映射为false:
var d2 = {
"values": [{"9", false, "", true, null, "", "", ""]
};
var viewmodel2 = ko.mapping.fromJS(d2);
当使用ko.mapping.toJSON(viewmodel2)映射回json时代码>这是结果:
{ "values": [
"9",
false,
false,
true,
null,
false,
false,
false] }
请注意,数组中的最后3个字符串值被转换回false
这是虫子吗?或者不支持包含布尔值和字符串的数组
这里有一个解决方法。这似乎是一个明确的错误
我对您的JSFIDLE代码进行了分叉,发现问题似乎在于当toJSON方法开始解析对象时,它会取第一个(“”或false),并将每个(“”或false)视为找到的初始对象
如果这没有多大意义,请尝试将对象开头的false改为“”,反之亦然
您可能想在Steve Sanderson的github页面上发布有关此问题的信息
这确实是一个bug,现已修复。
这是由两件事引起的:
- 用于查看数组中包含哪些键的相等比较使用了“==”运算符而不是“==”,因此它认为“false”和“”是同一个键
- 其次,作为复制密钥处理逻辑的一部分,我对数组中的所有密钥进行排序。但是,如果不显式提供键回调,则不应执行此操作,因为在这种情况下,您可能关心项的顺序
GitHub提供了最新版本1.2.3,还创建了一个NuGet包。由Srluisreyes精心制作的复制品现在也可以使用了 谢谢,我注意到你报告了这个问题。我的临时解决方法是使用布尔作为字符串“True”、“False”,很快就变脏了。我用最新版本的knockout映射更新了fiddle。谢谢你的快速修复,罗伊。