微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Childrows 中的嵌套表不适用于动态数据

如何解决Childrows 中的嵌套表不适用于动态数据

我正在尝试将 5 层数据转换为数据表。我想实现类似的目标 -> http://live.datatables.net/mukirowi/247/edit。所以我试图在 AngularJS 应用程序的 childrow 中显示一个新的数据表。我的问题是:

当我尝试它工作一半 - 它显示表格但没有数据:

        vm.example_dtOptions = create_dt_options();
        vm.example_dtColumns = create_dt_columns();
        vm.example_dtInstance = {};

        function create_dt_options() {
            var _data = data;
            var _dt_options = DataTableService.create_dt_options_local_data(vm,_data);

            _dt_options.rowCallback = rowCallback;
            _dt_options.createdRow = createdRow;

            return _dt_options;
        }

        function create_dt_columns() {
            var _columns = [
                {
                    className: 'details-control',orderable: false,data: null,defaultContent: ''
                },{data: "clientID"},{data: "wip"},{data: "ar"},{data: "ar0_30"},{data: "ar31_60"},{data: "ar61_90"},{data: "ar91_120"},{data: "ar121_"},{data: "suspense"}
            ];

            return _columns;
        }


        // Callback-Funktion für ganze Zeile (hier: Click-Event auf Zeile)
        // Add event listener for opening and closing first level childdetails
        function rowCallback( tabrow,data,dataIndex ){
            var a;
            $( tabrow ).unbind( "click" );
            $( tabrow).bind( "click",function(){
                $scope.$apply( function(){
                   // event.stopImmediatePropagation();
                    var tr = $(tabrow);
                    var table = vm.example_dtInstance.DataTable;
                    var row = table.row(tr);
                    a = row;

                    if (row.child.isShown()) {
                        // This row is already open - close it
                        row.child.hide();
                        tr.removeClass('shown');

                    }
                    else {
                        // Open this row

                        displayChildOfTable1( row);
                        tr.addClass('shown');
                    }

                });

                $timeout(function(){
                //    vm.show_child1 = true;
                });
            } );
        }

        function createdRow(row,dataIndex) {
            // Recompiling so we can bind Angular directive
            $compile(angular.element(row).contents())($scope);
        }

  
   /*   --------------------------------  Child1 --------------------------------------------*/

        function displayChildOfTable1(row,data){

            var string = '<table id="dataTable_child1" class="DTTable2 table kiss-grid">';
            string = string + '</table>';
            var table = $(string);

            // display it in the child row
            row.child(table).show();
/*
            var a = row.child(table);
             console.log("a",a);*/

            // Initialise as a DataTable

            var Table2 = table.DataTable({
                processing: true,data: vm.data,searching: true,paging: true,pageLength: 10,ordering:  true,options: vm.child1_dtOptions,// 676
                columns: vm.child1_dtColumns,instance: vm.child1_dtInstance
            })
        }

        vm.child1_dtOptions = create_dt_options_child1();
        vm.child1_dtColumns = create_dt_columns_child1();
        vm.child1_dtInstance = {};

        function create_dt_options_child1(){
            var _data = data_child;
            var _dt_options = DataTableService.create_dt_options_local_data( vm,_data );

            _dt_options.rowCallback_child = rowCallback_child1;
            _dt_options.createdRow_child = createdRow_child1;
            return _dt_options;
        }

        function create_dt_columns_child1(){
            var _columns = [
                {
                    className: 'details-control',{ data: "wip",title: "wip"},{ data: "ar" },{ data: "ar0_30" },{ data: "ar31_60" },{ data: "ar61_90" },{ data: "ar91_120" },{ data: "ar121_" },{ data: "suspense" }
            ];

            return _columns;
        }


        function createdRow_child1(row,dataIndex) {
            // Recompiling so we can bind Angular directive
            $compile(angular.element(row).contents())($scope);
        }


        // Callback-Funktion für ganze Zeile (hier: Click-Event auf Zeile)
        // Add event listener for opening and closing second level childdetails
        function rowCallback_child1( tabrow,dataIndex ){
            console.log("hiiii")
            $( tabrow ).unbind( "click" );
            $( tabrow).bind( "click",function(){
                $scope.$apply( function(){
                    event.stopImmediatePropagation();
                    console.log("row",row);
                    console.log("data",data);
                    console.log("index",dataIndex);
                    console.log("click");

                    var tr = $(tabrow);
                    console.log("tr",tr);
                    var table = vm.child1_dtInstance.DataTable;
                    var row = table.row(tr);

                    if (row.child.isShown()) {
                        // This row is already open - close it
                        row.child.hide();
                        tr.removeClass('shown');

                        // Destroy the Child Datatable
                        //  $('#cl' + data.clientID).DataTable().destroy();
                    }
                    else {
                        // Open this row

                        //displayChildOfTable2( row);

                        tr.addClass('shown');

                    }
                });

            } );
        }

但不是那样:

 vm.example_dtOptions = create_dt_options();
        vm.example_dtColumns = create_dt_columns();
        vm.example_dtInstance = {};

        function create_dt_options() {
            var _data = data;
            var _dt_options = DataTableService.create_dt_options_local_data(vm,function(){
                $scope.$apply( function(){
                   // event.stopImmediatePropagation();
                    /*console.log("row",dataIndex);
                    console.log("click");
*/
                    var tr = $(tabrow);
                   // console.log("tr",tr);
                    var table = vm.example_dtInstance.DataTable;
                    var row = table.row(tr);
                    a = row;

                    if (row.child.isShown()) {
                        // This row is already open - close it
                        row.child.hide();
                        tr.removeClass('shown');

                        // Destroy the Child Datatable
                      //  $('#cl' + data.clientID).DataTable().destroy();
                    }
                    else {
                        // Open this row

                        displayChildOfTable1( row);
                        //a.child.show();
                        tr.addClass('shown');
                    }

                });

                $timeout(function(){
                //    vm.show_child1 = true;
                });
            } );
        }

        function createdRow(row,dataIndex) {
            // Recompiling so we can bind Angular directive
            $compile(angular.element(row).contents())($scope);
        }

   /*  ---------------------------------------------------------------------------------------------------------------*/
   /*   --------------------------------  Anfang DeFinition Child1 Tabelle--------------------------------------------*/

        function displayChildOfTable1(row,data){
            console.log("hi vom child")
            var string = '<table id="dataTable_child1"' +
                ' datatable=""' + ' dt-options="vm.child1_dtOptions"' +
                ' dt-columns="vm.child1_dtColumns"' +
                ' dt-instance="vm.child1_dtInstance"' +
                ' class="DTTable2 kiss-grid" >';
            string = string + '</table>';
            var table = $(string);

            // display it in the child row
            row.child(table).show();
        }

        vm.child1_dtOptions = create_dt_options_child1();
        vm.child1_dtColumns = create_dt_columns_child1();
        vm.child1_dtInstance = {};

        function create_dt_options_child1(){
            var _data = data_child;
            var _dt_options = DataTableService.create_dt_options_local_data( vm,dataIndex) {
            // Recompiling so we can bind Angular directive
            $compile(angular.element(row).contents())($scope);
        }

/*          ---------------------------------------------------------------------------------------------------------------
           --------------------------------  Anfang DeFinition Child1 Tabelle--------------------------------------------*/

        // Callback-Funktion für ganze Zeile (hier: Click-Event auf Zeile)
        // Add event listener for opening and closing second level childdetails
        function rowCallback_child1( tabrow,tr);
                    var table = vm.child1_dtInstance.DataTable;
                    var row = table.row(tr);

                    if (row.child.isShown()) {
                        // This row is already open - close it
                        row.child.hide();
                        tr.removeClass('shown');

                        // Destroy the Child Datatable
                        //  $('#cl' + data.clientID).DataTable().destroy();
                    }
                    else {
                        // Open this row

                        //displayChildOfTable2( row);

                        tr.addClass('shown');

                    }
                });

            } );
        }

我认为 angular 不会注册新的子表。我该如何解决?预先感谢您的帮助

环境:-角度版本:AngularJS v1.5.7

  • jquery 版本:jQuery JavaScript 库 v2.2.1
  • 数据表版本:dt-1.10.18
  • 角度数据表版本:角度数据表 - v0.5.4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。