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 插件进行映射。

我需要写入触发,但它永远不会。读取工作正常,但我无法验证或自定义格式我的写入。

4

1 回答 1

1

首先要做的事情:发布示例时应该更加小心。请确保它们有效:

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

计算出的 observable 的问题是您在编辑值时更改了包含的值,而不是数组本身,因此write永远不会调用该函数。(除此之外,即使 knockoutjs 以这种方式工作,它也不会工作,因为CostandQuantity属性不是可观察的)。

一个可行的解决方案: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());
于 2013-07-17T13:28:16.250 回答