jqx网格和淘汰计算列

时间:2012-12-03 10:51:35

标签: knockout.js jqxgrid computed-observable

我想要一个带有计算列的简单jqxGrid。看起来一切都好,但它不起作用。简单的例子:

<script type="text/javascript">
$(document).ready(function () {
    var vm = {
        date: ko.observable(new Date()),
        items: ko.observableArray(),
        load: function () {
            for (var i = 0; i < 10; i++) {
                var item = {
                    x: ko.observable(i),
                    y: ko.observable(i + 1)
                };
                item.sum = ko.computed(function() { return this.x() + this.y(); }, item);
                this.items.push(item);
            }
        }
    };
    ko.applyBindings(vm);
});
</script>

<input data-bind="click: load, jqxButton: {theme: 'metro'}" type="button" value="Load" />
<div data-bind="jqxGrid: {source: items, disabled: false, autoheight: true,
                editable: true,
                selectionmode: 'singlecell',
                theme: 'metro',
                columns: [
                { text: 'X', dataField: 'x' },
                { text: 'Y', dataField: 'y' },
                { text: 'Sum', dataField: 'sum'}
                ]}" id="jqxgrid">
</div>
<table style="margin-top: 20px;">
<tbody data-bind="foreach: items">
    <tr>
        <td data-bind="text: x"></td>
        <td data-bind="text: y"></td>
        <td data-bind="text: sum"></td>
    </tr>
</tbody>
</table>

接下来:我能够更新x或y,我在下表中看到了新值,但Sum字段在第一次加载后永远不会更新。

1 个答案:

答案 0 :(得分:0)

您的.sum属性是计算值,但jqxgrid不知道计算或其他可观察值。因此,它不知道它需要更新。

您可以通过订阅计算并在网格上调用.updatebounddata来自行触发更新:

vm.sum.subscribe(function() {
    $('#idOfYourGridHere').trigger( 'updatebounddata' );
}

我看到你正在使用一个名为jqxgrid的自定义挖空绑定。如果您愿意,可以修改该绑定,以便正确更新。