2013-07-15 43 views
0

我有可读写的总计算输入框。计算写入不适用于阵列

<div data-bind="foreach:TotalCostQuantity"> 
    <input data-bind:"value: Cost, valueUpdate:'afterkeydown'" /><br /> 
    <input data-bind:"value: Quantity, valueUpdate:'afterkeydown'" /> 
</div> 

我的视图模型是这样的:

self.TrancheCostQuantity = ko.computed({ 
     read: function() { 
      //do some math here to calculate cost and quant totals 

      return [{Cost:100, Quantity:10},{Cost:200, Quantity:20}]; 
     }, 
     write: function (newValue) { 
      customformat(newValue); 
     } 
    }, self); 

的成本和数量都从能有行和列的动态数量的网格。它使用ko.mapping插件进行映射。

我需要写入,但它从来没有。阅读工作正常,但我无法验证或自定义格式我的写道。

+1

你能不能做一个小提琴? – Damien

+1

'customformat'函数的作用是什么? –

+0

customformat将使TrancheCostQuantity向上舍入到最近的美元并添加一个美元符号。 – user1175857

回答

1

首先要做的事情是:当你发布例子时你应该更加小心。请确保他们的工作:

  • 在你TotalCostQuantity的HTML,但在视图模型:TrancheCostQuantity
  • 在您使用data-bind:"value...的HTML,但是这应该是data-bind="value...

与问题可计算的观察值是您在编辑值时更改包含的值,但不是数组本身,因此从不调用write函数。 (这是除了事实,即使knockoutjs这样工作,它不会工作,因为CostQuantity属性不是可观察的)。

A工作液:http://jsfiddle.net/P2Zqm/

var CostQuantity = function(cost, quantity) { 
    self = this; 

    self.Cost = ko.observable(cost); 
    self.Quantity = ko.observable(quantity); 

    self.CustomFormat = ko.computed(function() { 
     return parseInt(this.Cost(),10) * parseInt(this.Quantity(),10); 
    }, self); 
}; 

var vm = function() { 
    self = this; 
    self.TotalCostQuantity = ko.computed(function() { 
     //do some math here to calculate cost and quant totals 

     return [new CostQuantity(100,10), new CostQuantity(200,20)]; 
    }); 
}; 

ko.applyBindings(new vm()); 
+0

是的!优秀的答案。就像OP一样,当'写'永远不会被触发时,我过度复杂了我的代码。 –