我发现一些奇怪的行为与可观察的扩展器结合淘汰映射。我已经使用样本扩展器来舍入文档中的数字。
为了让它与淘汰映射一起运行,我通过覆盖'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
答案 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.