【问题标题】:jqx grid and knockout computed columnjqx 网格和剔除计算列
【发布时间】:2012-12-03 10:51:35
【问题描述】:

我想要一个带有计算列的简单 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 字段在第一次加载后永远不会更新。

【问题讨论】:

  • 能发一下jqxGrid敲除绑定的源码吗?我看到你在那里使用了一个自定义的敲除绑定,它可能负责连接订阅。问题可能出在该代码中。

标签: knockout.js jqxgrid computed-observable


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,它看起来像一个解决方案,但不幸的是,jqx 绑定的工作速度很慢,每次发生变化时都使用它。我不能离开 jqx 网格内部有问题的想法。看看这个例子。如果您将底部表格的绑定更改为绑定 内的值,您将能够轻松编辑它们。如果您更改 X 或 Y,Sum 将在表格和网格 (!) 中自动计算和更新。为什么当我在网格中编辑相同的值时它不起作用是一个奇迹。网格在视图模型中更新它,但做一些错误的方式不会重新计算总和
  • @YanOreshchenkov 请发布 jqxGrid 淘汰赛绑定处理程序的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2017-01-16
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多