knockout.js - 在包含空字符串的数组上使用 fromJS 会将这些字符串替换为 false

标签 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为此。

最佳答案

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

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

最新版本 1.2.3 已在 GitHub 上提供,并且还创建了一个 NuGet 包。 Srluisreyes 善意创建的复制版 jsfiddle 现在也可以使用了!

关于knockout.js - 在包含空字符串的数组上使用 fromJS 会将这些字符串替换为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6858145/

相关文章:

knockout.js - 如何使用knockout mapping插件?

knockout.js - ko.mapping创建函数,扩展对象

javascript - 使用 updateFromJS 会在应该添加值时替换值

knockout.js - 如何在 Knockout 中创建计算可观察数组

javascript - 我如何进行初始 JavaScript Ajax 初始化?

javascript - 使用 Knockout Observable Array 时 UI 未更新

javascript - knockout/MVVM 设计问题

javascript - knockout : Change the color of selected value in dropdown list

knockout.js - Knockout.mapping.js - 更新 observableArray 不会更新 ko.compulated 值

javascript - knockout 不会更改对象数组中的复选框状态