gpt4 book ai didi

javascript - 在文本框中再次使用相同条目的逗号分隔数字的 Knockout bindingHandler

转载 作者:行者123 更新时间:2023-11-30 12:42:49 25 4
gpt4 key购买 nike

我需要创建一个 Knockout bindingHandler,它将金额格式化为逗号分隔的数字。经过一番搜索,我找到了解决方案 here (感谢@nemesv 提供的解决方案)使用 http://numeraljs.com/用于转换。

Binder 如下:

ko.bindingHandlers.formatMoney = {
init: function(element, valueAccessor) {

var value = valueAccessor();

var interceptor = ko.computed({
read: function() {
return numeral(ko.unwrap(value)).format('0,0.00');
},
write: function(newValue) {
if($.trim(newValue) == '')
value("0");
else
value(numeral().unformat(newValue));
}
}).extend({ notify: 'always' });

if(element.tagName.toLowerCase() == 'input' )
ko.applyBindingsToNode(element, {
value: interceptor
});
else
ko.applyBindingsToNode(element, {
text: interceptor
});
}
}

我用过它,在正常情况下效果很好。但是在与文本框一起使用时我需要修复它。

问题在于正在使用的可观察对象通常仅在值实际发生变化时才会收到通知。因此,如果我每次键入不同的值,则会应用实际的格式化程序。例如

  • 如果我第一次输入 1234 并且文本框失去焦点,它会转换为 1,234.00。
  • 现在,如果您在文本框中再次键入 1234。它不起作用, Binder 的 read 方法未被调用。

我该怎么做才能使 拦截器的 read 方法每次都触发,即使 observable 具有相同的值。?

示例 fiddle :http://jsfiddle.net/vEcSq/4/

谢谢。

最佳答案

您可以在可观察对象上使用 valueHasMutated 函数来提醒订阅者它已更改,即使它没有。在 interceptorwrite 函数中,添加以下行作为函数的最后一行。

value.valueHasMutated();

我有updated your jsfiddle通过通话,它似乎工作正常。

关于javascript - 在文本框中再次使用相同条目的逗号分隔数字的 Knockout bindingHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23803394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com