DataTables rows.add(array).draw() 被多次调用

问题描述 投票:0回答:1

我这样做是为了根据服务器返回的数据创建列数。我想检查数组中的数据是否与列名匹配,如果匹配则返回 yes,否则返回 no。

function initTable(userJvmsArray) {
            var columnsCallbacks = [{
                title: "Username",
                data: "username"
            }];

            for (var i = 0; i < $scope.unique.length; i++) {
                $('#nameColumn').after('<th>' + $scope.unique[i] + '</th>');
                var jvm = $scope.unique[i];
                var col = {
                    title: jvm,
                    data: function(data, type, row) {
                        var data2 = data;
                        var jvms = $scope.unique;
                        for (var k = 1; k < jvms.length; k++) {
                            console.log(jvms);
                            for (var j = 0; j < data2.myarray.length; j++) {
                                if (table.column(k).title() == data2.myarray[j].Name) {
                                    console.log(table.column(k).title() + " = " + data2.myarray[j].Name + " YES");
                                    return "yes";
                                } else {
                                console.log(table.column(k).title() + " = " + data2.myarray[j].Name + " NO");
                                    return "no";
                                }
                            }
                        }


                    }
                };
                columnsCallbacks.push(col);
                $scope.columns = columnsCallbacks;
            }
            $scope.myTable = $('#myTable').DataTable({
                'paging': true,
                "pageLength": 3,
                'columns': columnsCallbacks
            });

问题是该函数似乎运行了多次并且错误地填充了表,这是我的控制台日志:

["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66

["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69

["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69

["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user1: myword = myword YES myctrl.controller.js:66
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO myctrl.controller.js:69
["myword", "secondword", fastLoop: function, fastLoopAsc: function] myctrl.controller.js:63
user11: myword = secondword NO 
javascript jquery angularjs datatables
1个回答
0
投票

原因

由于 DataTables 的工作方式,

columns.data

 的函数会被执行多次。虽然还不清楚,但这个函数可能会被多次调用,因为 DataTables 会根据需要的不同数据类型调用它 - 类型检测、排序、过滤和显示(type == 'type'
type == 'sort'
type == 'filter'
type == 'display'
)。也可以调用它来设置单元格的数据(
set == 'set'
)。

函数应定义如下,请参阅

columns.data

了解更多详细信息。

data: function(row, type, set, meta){ }

注意事项

© www.soinside.com 2019 - 2024. All rights reserved.