Knockout.js jqx网格和剔除计算列
我想要一个带有计算列的简单jqxGrid。看起来一切正常,但不起作用。简单的例子: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 (
<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敲除绑定处理程序的代码。