我无法弄清楚如何使用knockout js和非us语言环境来处理计算.我的逗号是,并且使用
jquery.globalization插件正确验证,但是淘汰计算给了我一个NaN. knockout js是否以任何方式支持这种情况还是存在任何变通方法?
例:
使淘汰赛js网站上的cartEditor示例工作允许数量字段中的十进制值并允许全球化输入(,作为逗号符号)和输出格式
http://knockoutjs.com/examples/cartEditor.html
我需要这个在asp.net mvc 3网站上工作,因为我使用nb-NO文化运行网站,模型绑定器期待,作为逗号标志
解决方法
我通过编写包含
autoNumeric.js格式的自定义绑定来做类似的事情. (
gist)
ko.bindingHandlers.autoNumeric = function ($) { function getElementValue(el) { return parseFloat(el.autoNumericGet(),10); } function getModelValue(accessor) { return parseFloat(ko.utils.unwrapObservable(accessor()),10); } return { init: function (el,valueAccessor,bindingsAccessor,viewmodel) { var $el = $(el),bindings = bindingsAccessor(),settings = bindings.settings,value = valueAccessor(); function updateModelValue() { value(getElementValue($el)); }; $el.autoNumeric(settings); $el.autoNumericSet(getModelValue(value),settings); $el.change(updateModelValue); },update: function (el,newValue = getModelValue(valueAccessor()),elementValue = getElementValue($el),valueHasChanged = (newValue != elementValue); if ((newValue === 0) && (elementValue !== 0) && (elementValue !== "0")) { valueHasChanged = true; } if (valueHasChanged) { $el.autoNumericSet(newValue); setTimeout(function () { $el.change() },0); } } }; }
使用此自定义autoNumeric绑定的数据绑定如下所示:
<input data-bind="autoNumeric:amount,settings:{aSign:'$'}" />
查看autoNumeric.js广泛的格式选项,以查看您可以使用这些设置执行的操作.