【问题标题】:Change attribute text and keep value of an input with knockout更改属性文本并保留带有敲除的输入值
【发布时间】:2013-09-23 11:31:50
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    计算隐藏了真正的 observable,当前版本 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/

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多