敲除koGrid中的计算值

时间:2013-03-22 07:12:37

标签: javascript knockout.js

我需要使用一个网格,其中一列具有基于网格中其他列的值的计算值...

作为样本要求,我有一列显示年龄,这是一个可编辑的列...如果更改年龄,下一列应计算值100 - 更新年龄......

我已经创建了一个jsfiddle来演示我的需求JSFiddle

{field: 'computedAge', displayName: '100 -Age',cellTemplate:self.calculatedCellTemplate}

是我希望在更新年龄列时填充的计算列

有谁能建议我如何实现这个目标?

1 个答案:

答案 0 :(得分:2)

您只需两步即可实现此目的:

(1)为数据列表中的每个项目创建实例化函数,其中包含computedAge计算属性。

function Item(data) {
    this.name = ko.observable(data.name);
    this.age = ko.observable(data.age);
    this.computedAge = ko.computed(function(){
        return 100 - this.age();
    }, this);
}

(2)映射源数组以创建实例而不是简单的observableArray创建。

self.browsers = ko.observableArray(
    ko.utils.arrayMap(
        datastore.initialData,
        function(data){ return new Item(data); }
    )
);

工作示例:http://jsfiddle.net/xp6xa/

<强>更新 要获得自我更新的单元格,请不要忘记定义self.calculatedCellTemplate,如下所示:

    self.calculatedCellTemplate = '<span data-bind="text: $parent.entity.computedAge"></span>';

http://jsfiddle.net/xp6xa/3/