Knockout JS扩展程序不适用于映射插件

时间:2014-03-22 11:00:08

标签: knockout.js knockout-mapping-plugin knockout-validation

我发现一些奇怪的行为与可观察的扩展器结合淘汰映射。我已经使用样本扩展器来舍入文档中的数字。

为了让它与淘汰映射一起运行,我通过覆盖'create'字段来扩展observable。相比之下,我在视图模型中直接创建了另一个observable。

当将这两个绑定到输入字段时,它们的行为几乎相同(例如,当你在'a'时它将被校正为0),除了这种特殊情况: 当旧值为0并且再次键入“a”时,将不会在映射的observable上更正它。

function Model() {
        this.myNumberOne = 0;    
}

function AppViewModel(model) {
        ko.mapping.fromJS(model, {
            'myNumberOne': {
                create: function(options) {
                return ko.observable(options.data).extend({numeric: 2});
            }
        }
    }, this);
    this.myNumberTwo = ko.observable(0).extend({numeric: 2});
}

var vm = new AppViewModel(new Model());

您可以在此处进行测试:http://jsfiddle.net/3S9xG/

有谁能告诉我为什么他们的行为不一样以及如何解决?

提前致谢

FISCHERMAN

1 个答案:

答案 0 :(得分:0)

ko.mapping在knockout v3.x ko.computed中遇到了问题。

您可以尝试旧的淘汰赛v2.x,或使用补丁ko.mapping https://raw.githubusercontent.com/andrewaylett/knockout.mapping/ko3/knockout.mapping.js

使用ko.mapping补丁更新了你的jsfiddle。 http://jsfiddle.net/3S9xG/2/

此外,现有代码中存在拼写错误

return result;a // anyway, the extra 'a' doesn't break javascript.