Javascript 更新一列中的数据后更新表(重新计算)
我正在构建一个启用了DataTable的简单页面 来自我的服务器的数据如下所示:Javascript 更新一列中的数据后更新表(重新计算),javascript,datatables,Javascript,Datatables,我正在构建一个启用了DataTable的简单页面 来自我的服务器的数据如下所示: [{"name": "John","salary": 2000,"bonus1": 100,"bonus2": 100}, {"name": "Jack","salary": 2500,"bonus1": 0,"bonus2": 200}, {"name": "Bill","salary": 2000,"bonus1": 300,"bonus2": 300} ] 我需要添加并计算第五列,该列表示员工工资的
[{"name": "John","salary": 2000,"bonus1": 100,"bonus2": 100},
{"name": "Jack","salary": 2500,"bonus1": 0,"bonus2": 200},
{"name": "Bill","salary": 2000,"bonus1": 300,"bonus2": 300}
]
我需要添加并计算第五列,该列表示员工工资的百分比值(工资/所有工资的总和)
在fnPreDrawCallback
中,我可以修改oSettings.aoData
所以当我修改console.log(oSettings.aoData)
时,我会得到正确的值,但表中的列为空
我的fnPreDrawCallback
函数如下所示:
"fnPreDrawCallback": function (oSettings) {
iTotal = [0, 0, 0]; //declared in $(document).ready
var dataLength=oSettings.aoData.length;
for (var i = 0; i < dataLength; i++) {
iTotal[0] += oSettings.aoData[i]._aData.salary;
iTotal[1] += oSettings.aoData[i]._aData.bonus1;
iTotal[2] += oSettings.aoData[i]._aData.bonus2;
}
for (i = 0; i < dataLength; i++) {
oSettings.aoData[i]._aData.percent=(oSettings.aoData[i]._aData.salary / iTotal[0] * 100).toFixed(2)+'%';
}
console.log(oSettings.aoData);
},
“fnPreDrawCallback”:函数(oSettings){
iTotal=[0,0,0];//在$(文档)中声明。准备好了吗
var dataLength=oSettings.aoData.length;
对于(变量i=0;i
这是我的密码:
我的问题:我应该在哪里更新数据,以便在表中可以看到更新?
我希望避免使用选择器和更新DOM内容,因为我希望能够使用TableTools或服务器端处理导出表。您可以使用链接下方的DataTables页脚回调检查 也请检查此讨论
您可以使用链接下方的DataTables页脚回调检查 也请检查此讨论
我不明白你为什么不同时做这两件事,更新aoData(以便导出)和更新html(以便正确显示) 我知道这是一种黑客行为,但它应该会起作用:) 使用fnUpdate()进行编辑
我不明白你为什么不同时做这两件事,更新aoData(以便导出)和更新html(以便正确显示) 我知道这是一种黑客行为,但它应该会起作用:) 使用fnUpdate()进行编辑 以下是答案 基本上,您需要首先计算工资总额(我将您的数据移动到一个变量,然后在呈现表格之前计算总额) 在这之后,您需要在%列上使用fnRender函数来计算和显示百分比,如下所示(下面是%的列定义) 这是答案 基本上,您需要首先计算工资总额(我将您的数据移动到一个变量,然后在呈现表格之前计算总额) 在这之后,您需要在%列上使用fnRender函数来计算和显示百分比,如下所示(下面是%的列定义)
fnFooterCallback
在fnPreDrawCallback
之后激发。你不明白我的问题。我知道如何添加摘要,我需要更新列。我可以修改aoData,这没问题,我需要知道更新后如何显示它。fnFooterCallback
在fnpredrawlack
之后触发。你不明白我的问题。我知道如何添加摘要,我需要更新列。我可以修改aoData,这没问题,我需要知道更新后如何显示它。我从前面的问题和您的回答中了解到了这一问题:)艾伦在datatables论坛上写信给我,说我应该使用FNDUpdate,但我不知道在我的情况下如何使用它,在这种情况下,我应该更新aoData以查看表中的更改。我知道这是在反复问同样的问题,但在真实的报告中,我将有大约30列和100多行。您的解决方案目前是最好的,但是如果有一个选项可以修改aoData并查看更新,那将是非常棒的:)@Misiu好的,我将使用fnUpdate@Misiu我及时抓住了赏金,我希望,这是解决方案,您可以使用fnUpdate()在click handler Hi中:)这几乎是完美的:)因为当我单击show/hide按钮时百分比列会更新。但我认为将fnUpdate
更新为第二个单击处理程序不会有问题。这样,在我移动行之后,更新将可见。希望这足够清楚:)除了一切都很好:)我做了一点修改:我知道这可以优化,但现在这个效果更好。再次感谢,你救了我一天!我从我之前的问题和你们的回答中了解到了这种黑客行为:)艾伦在datatables论坛上写信给我说我应该使用FNDUpdate,但我不知道如何在我的情况下使用它,在这种情况下,我应该更新aoData以查看表中的更改。我知道这是在反复问同样的问题,但在真实的报告中,我将有大约30列和100多行。您的解决方案目前是最好的,但是如果有一个选项可以修改aoData并查看更新,那将是非常棒的:)@Misiu好的,我将使用fnUpdate@Misiu我及时抓住了赏金,我希望,这是解决方案,您可以使用fnUpdate()在click handler Hi中:)这几乎是完美的:)因为当我单击show/hide按钮时百分比列会更新。但我认为将fnUpdate
更新为第二个单击处理程序不会有问题。这样,在我移动行之后,更新将可见。希望这足够清楚:)除了一切都很好:)我做了一点修改:我知道这可以优化,但现在这个效果更好。再次感谢,你救了我一天<代码>fnRender已弃用。第二件事:开始时,将计算移到表外会有所帮助,但请尝试将第二个表中的行添加到第一个表中。添加修改后,百分比列不会刷新。感谢您尝试:)fnRender
已被弃用。第二件事:开始时将计算移到表外有帮助
{
"sTitle": "%",
"bVisible": true,
"sType": "string",
"sWidth": "50px",
"sClass": "center percent",
"mData": "percent",
"fnRender": function(o) {return o.aData.salary/totalSalaries}
}