【问题标题】:KnockoutJS exender doesnt work with mapping pluginKnockout JS 扩展器不适用于映射插件
【发布时间】:2014-04-29 21:06:33
【问题描述】:

我发现可观察的扩展器与剔除映射相结合的一些奇怪行为。我已使用示例扩展器对文档中的数字进行舍入。

为了让它通过淘汰映射运行,我通过覆盖“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/

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

提前致谢

费舍曼

【问题讨论】:

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


    【解决方案1】:

    ko.mapping 遇到了淘汰赛 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2012-09-28
      • 2012-12-26
      • 2014-04-12
      • 2012-11-05
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多