1

我正在使用 knockoutjs 的计算属性。这是我的ViewModel

function AppViewModel() {
    var self = this; 
    self.firstValue = ko.observable(6);
    self.secondValue = ko.observable(5);
    self.addValue = ko.computed(function() {
        return self.firstValue() + self.secondValue();
    });
}

// Activates knockout.js
ko.applyBindings(new AppViewModel()); 

我的html绑定如下:

<p><input data-bind="value: firstValue"></p>

<p><input data-bind="value: secondValue"></p>

<p><input data-bind="value: addValue"></p>

我面临的问题是第一次显示 11 没问题,但是当我更改文本框中的任何值时,它会连接这些值而不是显示它们的添加。添加属性时我是否需要使用parseIntjs 或者我在 knockout.js 中遗漏了一些东西?

这是jsfiddle链接

4

1 回答 1

2

是否不可能将 observable 设为 numerice 以便它们始终可用于数字操作?

你可以像这样扩展 observable

ko.extenders.number = function(observable, opt) {
   return ko.computed({
       read: observable,
       write: function(value) {
           if(typeof value !== "number") {
               value = parseFloat(value);
           }           

           if(!isNaN(value)) {
               observable(value);
           }           
       }
   });
}

编辑:http: //jsfiddle.net/Rv7EP/

于 2013-10-03T09:30:19.213 回答