我正在使用Tabulator 3.5,并且有一个增幅器:
Tabulator.extendExtension("mutator", "mutators", {
percentageMutator:function(value, data, type, mutatorParams){
console.log(mutatorParams); // sanity check - we'll come back to this!
console.log(data); // sanity check - we'll come back to this!
// code omitted here to perform calculations
return percentage
}
});
我的构造函数对象,如下所示。请注意,列嵌套了两次。还要注意,我正在使用Django模板语言来动态构建表。
$("#markbook-table").tabulator({
columns: [
{title: "First Name", field: "firstname", validator: ["maxLength:50", "string"]},
{title: "Last Name", field: "lastname", validator: ["maxLength:50", "string"]},
{ title:"Some grouping",
columns:[
{% for assessment in assessments %}
{
title: "{{ assessment.name }} (out of {{ assessment.max_mark }})",
columns:[
{title: "Result", field: "{{ assessment.name }}", editor: "input",},
{title: "Mark out of", field: "{{ assessment.name }}_outof"},
{title: "weighting", field: "{{ assessment.name }}_weighting"},
{title: "%", field: "{{ assessment.name }}_percentage", mutator: "percentageMutator", mutatorParams:{assessmentName: "{{ assessment.name }}"}},
},
]
},
{% endfor %}
],
},
{% endfor %}
],
data: tableData,
cellEdited: function(cell) {
row.update({'Statistics_percentage': false}); // this is the line that fails
$.ajax({
// Do ajax magic here to save to database
});
},
})
问题的症结在于在结果字段更改后,我的row.update()不会重新计算%。选择了字段名称“ Statistics_percentage”是因为它适合我的当前数据,但我以后可以轻松地将其概括。
percentMutator函数中的console.log(mutatorParams)在表的初始构造和编辑后相同。但是,console.log(data)显示,在编辑后传递到percentMutator函数的行数据仅包含所讨论的单元格,并且不包含该行中其他单元格的任何数据-因此,计算在编辑后将失败。
我希望您对如何在编辑时强制所有行数据发送到mutator有所了解。非常感谢您阅读本文。任何帮助将不胜感激。
答案 0 :(得分:2)
如果只希望在编辑器上调用mutator,则需要使用 mutatorEdit 和 mutatorEditParams 选项。
仅当该单元格的值已更改时才在该单元格上调用mutator,更新该行数据中其他字段的值不会触发该mutator再次被调用,因为这可能导致无法预测的行为(想象一个可变器,将传入值乘以1000作为单位更改,如果在任何行数据更新时被调用,它将很快损坏数据。)。
如果您只想向用户显示值,而又不需要实际存储数据,我是否可以建议您使用格式化程序来执行此操作,那样您就可以调用{{ 1}}函数在更新后起作用,它将重新运行格式化程序并重新计算显示值。