Knockout.js jqx网格和剔除计算列

Knockout.js jqx网格和剔除计算列,knockout.js,jqxgrid,computed-observable,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 (

我想要一个带有计算列的简单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>

$(文档).ready(函数(){
var vm={
日期:ko.可观察(新日期()),
项目:ko.observearray(),
加载:函数(){
对于(变量i=0;i<10;i++){
变量项={
x:ko.可观察(i),
y:ko.可观测(i+1)
};
item.sum=ko.computed(函数(){返回this.x()+this.y();},item);
此.items.push(item);
}
}
};
ko.应用绑定(vm);
});

这是这样的:我可以更新x或y,并在下表中看到新值,但在第一次加载后,Sum字段从未更新。

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

您可以通过订阅computed并调用网格上的.updatebounddata来触发更新:

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

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

您可以发布jqxGrid淘汰绑定的源代码吗?我看到您正在使用一个定制的敲除绑定,它可能负责连接订阅。问题可能出在这段代码中。是的,它看起来像是一个解决方案,但不幸的是,jqx绑定在每次发生更改时都会非常缓慢地使用它。我不能认为jqx网格内部有问题。看看这个例子。如果将底部表的绑定更改为绑定内部的值,则可以轻松编辑它们。如果您更改X或Y,那么将自动计算和更新表格和网格中的总和(!)。为什么我在网格中编辑相同的值时它不起作用是一个奇迹。网格会在视图模型中更新它,但会以某种错误的方式进行更新,而这种方式不会重新命名sum@YanOreshchenkov请发布jqxGrid敲除绑定处理程序的代码。