2013-10-03 45 views
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这是确定的,但是当我改变文本框中的任何值,则其连接值而不是显示它们的附加值。我需要在添加属性时使用js的parseInt,或者我在knockout.js中丢失了一些东西?

,这里是jsfiddle link

+4

你需要在你的计算机使用'intParse'。 – nemesv

+0

是不是可以作为numerice观察,所以总是可以用于数字操作? – rahularyansharma

+0

不是开箱即用的。但是您可以使用扩展程序:http://knockoutjs.com/documentation/extenders.html#live_example_1_forcing_input_to_be_numeric – nemesv

回答

2

是没可能使观察为numerice所以总是他们可以 用于数字opearations?

可以延长观察到类似

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/