如何在编辑 table 后从 mutator 模块中的任何行获取值?

How to get values from any row in the mutator module after editing table?

在用户编辑 table 后,我无法从 table 的前三行获取值。

Table 应该通过匹配列“sp1, sp2,... spn”(选定的飞行员)和列“ro”(官方结果)来为列“pts1, pts2,... ptsn”(授予的点数)奖励分数).

1.- 如果“spn”值与同一行中的“ro”匹配,则用户从“po”列获得积分(官方积分由飞行员所在位置)。

2.- 否则,如果“spn”值在讲台上(前 3 行),则用户对于任何匹配但不满足第一个条件的值仅获得 2 分。

3.- 否则用户得 0 分。

用户可以编辑“ro”列以进行预测。

问题: 如果 table 被用户在页面上编辑,那么 mutator 将处理第一个和第三个条件,但不会处理第二个条件,因此它永远不会奖励 2 分。控制台日志导致 undefine on var podium。如果加载“ro”值,则不会发生这种情况,所以我猜逻辑是可行的。

到处找也想不出这个,我能漏掉什么吗?

这是我的示例代码:

var tabledata = [
    {id:1, ro:'', op: 25, sp1:"HAM", pts1:''},
    {id:2, ro:'', op: 18, sp1:"VER", pts1:''},
    {id:3, ro:'', op: 15, sp1:"BOT", pts1:''},
    {id:4, ro:'', op: 12, sp1:"PER", pts1:''},
    {id:5, ro:'', op: 10, sp1:"RIC", pts1:''},
    {id:6, ro:'', op: 8, sp1:"ALO", pts1:''} // table is only 10 rows first 10 pilots

];


var table = new Tabulator("#pronosticos", {
    height:"310px",
    dataTree: true,
    reactiveData:true,
    data:tabledata,
    dataChanged:function(data){
        document.getElementById("bt-puntaje").style.display="inline-block";
    },
    cellHozAlign:"center",
    layout:"fitColumns",
    columns:[ 
            {title:"POS", field: "pos", formatter:"rownum", width:40, frozen:true},
            {title:"RES PRE", field:"ro", width:70, frozen:true, editable:true, editor:'autocomplete', 
                editorParams: {
                    allowEmpty:true, 
                    showListOnEmpty:true, 
                    values:["ALO", "BOT", "GAS", "GIO", "HAM","LAT","LEC","MAZ","NOR", "OCO", "PER", "RAI", "RIC", "RUS", "SAI", "MCH", "STR", "TSU", "VET", "VER"] // list of pilots to select
                },
                
            {title:"PTS", field:"op", width:40, frozen:true, visible:false},


//          *****************************************    sp1   *****************************************
            {title:"PN", headerTooltip: "Players Name",
                columns:[
                {title:"SEL", field:"sp1", width:50},
                {title:"PTS", field:"pts1", bottomCalc:"sum", width:10,
                    mutator:function(value, data){ 
                        var selected = data.sp1;
                        var winner = data.ro;
                        var podium = [tabledata[0].ro, tabledata[1].ro, tabledata[2].ro]; // Error Undefine if table edited
                        if(selected === ""){
                            return
                        } else {
                            if(podium.length > 0){
                                    if(selected == winner){
                                        return data.op; // This part works ok
                                    } else {
                                        if(podium.includes(selected) && data.id < 4){
                                            return 2; // this part does not work
                                        } else {
                                            return 0;}}}}}

                    
                ]
            },
        ],
    });


    $("#bt-puntaje").click(function () {
        table.updateData(tabledata);
    }); 

好的,刚刚解决了我的问题,在同一页面中加载了第二个 table,具有相同的通用结构。将此 table 的 var 名称从 tabledata 更改为 tabledata2,将 table 更改为 table2 并且工作正常。 Tabulator 非常好,很高兴了解更多关于它的功能。向创作者和所有社区致以最诚挚的问候。