0

对不起,我的英语……不是很好,但我会尽力解释我的问题。我得到了一个带有一些输入字段的表单,这些字段必须以货币格式显示值,但是该字段的属性“值”必须是浮点类型。恢复:我希望输入以货币格式显示他的值,但不改变他的浮点值。我正在使用 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
     }
    });

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

谢谢

4

1 回答 1

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/

于 2013-09-23T13:24:54.443 回答