我有一个网格,我需要在一列中显示所有数字的总和。这些数字在网格中是可编辑的,并且总和需要在数字更改时更新(在保存之前)。我有很多问题。相关代码如下所示,here is a jsfiddle如果您想要使用正常运行的程序。
POST /v2/subscriptions
{
...
"notification": {
...
"attrs": [ "dateCreated", "dateModified", "*" ]
...
}
...
}
第一个问题 - 未显示摘要行的更新。我有onChange,onRefresh和onRender处理程序。它们会调用updateTotal(),它会在每条记录中添加“amount”,并将结果存储在摘要记录的amount字段中。我在更改金额后调用了refreshCell。但是当网格的初始显示发生时,没有任何处理程序被调用 - 因此摘要记录显示0.当最初显示网格时,应该进行什么调用来更新摘要数量?
第二个问题 - updateTotal()在错误的单元格中显示结果。单击按钮以执行updateTotal()。对于处于初始状态的表,3000的总和是正确的。您可以从更新innerHTML的行中看到摘要记录('s-1')在其'amount'字段中使用正确的值进行更新,并且我们称之为refreshCell('s-1','amount') 。但是在网格上,recid 1的'amount'单元格被更新为3000(并注意它被渲染为左对齐而不是右对齐)。为什么会这样?我应该拨打什么来更新摘要行中的“金额”单元格?
第三个问题 - 当用户更改“金额”单元格(双击以更改金额)时,会发生onChange事件,从而导致计算新的总计。但是,用户所做的更改在网格记录中不可用。更改将保存在其他位置。因此,新计算的总数与用户在网格上看到的数字不对应。在保存更新之前,新值在记录(records [i] .amount)中不可用。但是我需要在保存更改之前访问网格中显示的金额。如何访问更改的值?
答案 0 :(得分:0)
要修改现有记录,您需要使用set
方法 - 使用get
不获取参考,但需要副本!
w2ui.grid.set('s-1', {amount: total});
关于第一个问题:在网格已经渲染后,您正在分配渲染回调。您需要在构造函数中分配回调:
$('#grid').w2grid({
onRender: ....
});
当您使用set
代替get时,您的第二个问题应该不再是问题。
关于您的第三个问题:在保存更改之前,更改会存储在record.w2ui.changes
中 - 因此请致电grid.save()
或从更改中获取金额,而不是从原始记录中获取金额。
更新了小提琴: