在具有空字符串的数组上使用fromJS将用false替换这些字符串

时间:2011-07-28 11:25:52

标签: 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,
    null,
    false,
    false,
    false] }

请注意,数组中的最后3个字符串值将转换回false。

这是一个错误吗?或者是包含bool和不支持的字符串的数组

这是fiddle

2 个答案:

答案 0 :(得分:2)

这确实是一个错误,现在已修复。 这是由两件事引起的:

  • 用于查看数组中包含哪些键的相等比较是使用“==”运算符而不是“===”,因此它将“false”和“”视为相同的键。
  • 其次,我将数组中的所有键排序为重复键处理逻辑的一部分。但是,当您没有明确提供密钥回调时,这不是应该做的事情,因为在这种情况下您可能关心项目的顺序。

最新版本1.2.3可在GitHub上获得,并且还创建了一个NuGet包。由Srluisreyes亲切创造的再现jsfiddle现在也有效!

答案 1 :(得分:1)

这似乎确实是一个错误。

我分叉了你的jsFiddle代码,发现问题似乎是当toJSON方法开始解析第一个对象(“”或“false”)并将其他对象(“”或false)视为发现的初始对象时

如果这没有多大意义,请尝试将对象开头的false更改为“”,反之亦然。 http://jsfiddle.net/5HhMn/

您可能想在Steve Sanderson的github页面上发布此问题 https://github.com/SteveSanderson/knockout.mapping