更改属性文本并使用knockout保持输入的值

时间:2013-09-23 11:31:50

标签: javascript knockout.js

对不起我的英语......不是很好,但我会尝试解释我的问题。我得到一个带有一些输入字段的表单,必须以货币格式显示值,但字段的属性“value”必须是float类型。恢复:我希望输入以货币格式显示其值,但不改变其浮点值。 我正在使用Knockout来进行值的绑定。 以上我的一次尝试: Html代码:

    <input data-bind="value: unit_price, attr:{text: $parent.currency($data.unit_price())}" type="text" name="unit_price" class="align_right unit_price_col" />

淘汰赛:

    self.currency = ko.computed({
         read: function(key) {
    },
     write: function(value) {
         console.log(value); // Value of the input
     }
    });

我的尝试是尝试创建一个计算函数,当值更改时,函数接收该值,将值格式化为currency,并且仅更改属性文本以显示格式化值,而不更改observable的值。 这可能吗?

谢谢

1 个答案:

答案 0 :(得分:0)

计算隐藏真正的可观察的,只有当前版本的KO的解决方案是公开值,如

http://jsfiddle.net/Pv3f8/

ko.extenders.currency = function(observable, options) {
    var wrapped = ko.computed({
        write: observable,
        read: function() {
            return Globalize.format(observable(), "c" );
        }
    });

    wrapped.raw = observable;
    return wrapped;
};

我已向KO团队建议他们应该引入第三个功能format 这是bindnigHandlers使用的,这样你的observable总是返回实际值,但View使用格式化的值。在此之前,这是一种做法

<强>更新 如果您想使用值绑定更新输入中的值,那么您需要获得更多创意,因为它将是一个字符串

http://jsfiddle.net/Pv3f8/1/