2012-12-03 49 views
2

我想要一個簡單的jqxGrid計算列。看起來一切正常,但不起作用。簡單的例子:jqx網格和挖空計算列

<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,我在下面的表格中看到新的價值觀,而是先加載後總場永遠不會更新。

+0

你可以發佈jqxGrid挖空綁定的源代碼嗎?我看到你在那裏使用了一個自定義的knockout綁定,它可能負責連接訂閱。該代碼可能存在問題。 –

回答

0

您的.sum屬性是一個計算值,但jqxgrid不知道計算或其他可觀察值。因此,它不知道它需要更新。

你可以通過訂閱計算,並呼籲.updatebounddata對電網自己觸發更新:

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

我看到你正在使用自定義的淘汰賽結合稱爲jqxgrid。如果你喜歡,你可以修改那個綁定,以便正確更新。

+0

是的,它看起來像一個解決方案,但不幸的是,jqx綁定工作相當緩慢,每當有所改變時使用它。我不能留下jqx網格內出現錯誤的想法。看看這個例子。如果您更改底部表的綁定以綁定中的值,您將可以輕鬆編輯它們。如果您更改X或Y,則會自動計算並在表格和網格(!)中更新總和。當我在網格中編輯相同的值時,爲什麼它不起作用是一個奇蹟。網格更新它在視圖模型中,但它做了一些錯誤的方式,不recalc總和 –

+0

@YanOreshchenkov請張貼jqxGrid挖空綁定處理程序的代碼。 –