我搜索并测试过多个例子。我见过的所有示例都在JSFiddler中工作,但是当我将它们放入我的Typescript文件时,没有任何反应。我错过了一些东西,但对于我的生活,我无法弄清楚我错过了什么。
没有任何事情发生,事实上如果我在Chrome的DevTools中的扩展器上放置断点,它们永远不会被击中。
**直接从Knockoutjs.com采取一点修改,我删除了第二个参数并将其硬编码为2 **
Extenders.ts
ko.extenders.currency = function(target) {
var result = ko.pureComputed({
read : target,
write : function(newValue) {
var current = target(),
roundingMultipler = Math.pow(10, 2),
newValueAsNum = isNaN(+newValue) ? 0 : parseFloat(newValue.toString()),
valueToWrite = Math.round(newValueAsNum * roundingMultipler) / roundingMultipler;
if (valueToWrite !== current) {
target(valueToWrite);
}
else {
if (newValue !== current) {
target.notifySubscribers(valueToWrite);
}
}
}
}).extend({ notify: 'always' });
result(target());
return result;
}
我的ViewModel
this.productPrice = ko.observable(null)
.extend({
currency : true,
required : { message : 'A Product Price is required.' }
});
答案 0 :(得分:1)
在我的ViewModel上调用构造函数之后,我的代码的问题是初始化程序调用(设置我的扩展程序)。
我已经将我的原型,验证,扩展程序和BindingHanders的所有初始化程序移动到一个新的SiteMaster脚本,该脚本始终是页面加载时首先启动的。