在淘汰赛中使用货币& JavaScript的

时间:2014-05-29 10:12:53

标签: javascript knockout.js globalization

在我的申请表中,我有一个表格,里面有钱。我还有一些淘汰赛的customBinding来处理输入并为插入值添加正确的货币符号(例如:55 - > $ 55 | 55€)。

当货币符号必须在插入值之后时才会出现问题。然后,如果某人插入某个值,然后单击Backspace to my KO binding,则会出错。

示例

我的货币是€。我插入' 123'根据我的意见和我的约束力将其更改为' 123€'然后我点击Backspace,我在绑定中的值是' 123'而不是' 12'或者' 12'。所以我有问题要了解输出值应该如何。

这个问题有解决方法吗?我考虑过处理Backspace键或者用货币符号进行一些比较,但也许有人知道更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以使用extenders

ko.extenders.currency = function(target, options) {
    var result = ko.computed({
        read: target, 
        write: function(newValue) {
            var current = target();
            if((''+newValue).indexOf(options.currencySymbol) == -1){
            if (options.position == 'left') {
                target(options.currencySymbol+newValue);
            } else {
                target(newValue+options.currencySymbol);
            }}
        }
    }).extend({ notify: 'always' });

    result(target());

    return result;
};

function AppViewModel(one, two) {
    this.myNumberOne = ko.observable(one).extend({ currency: { currencySymbol : '£', position : 'left'}});
    this.myNumberTwo = ko.observable(two).extend({ currency: { currencySymbol : '£', position : 'right'}});
}

ko.applyBindings(new AppViewModel(221.2234, 123.4525));

JSFiddle