当前位置: 首页 > 面试题库 >

如何破坏数据表的首次初始化(模态内的数据表)

王泓
2023-03-14
问题内容

我有一个显示表格的模态。而且我使用datatable插件,以便数据可搜索和可排序。起初它正常工作,但是当我关闭模式并单击指向同一模式的其他链接时,它显示错误。我找到了销毁DataTable的解决方案,并destroy()在数据表初始化之前放置了,但是在表内部未显示任何数据..如果在初始化之后放置它,则第二次单击按钮时会出现初始化错误。我该如何解决?

这是我的代码:

    $.ajax({
      url: "<?php echo site_url('admin/group/getMember')?>",
      type: 'POST',
      data: { 'groupID': id},
      dataType: 'JSON',
      success: function(result){
        $('#records_table tbody').empty();
        // $('#records_table').DataTable({
            // "bLengthChange": false,
            // "paging":false,
        // });
        $('.modal-header #hdrmsg').text(result[0].fname);
        var trHTML='';

         $.each(result, function (i, item) {
            trHTML += '<tr><td>' + item.fname + '</td><td>' + item.mname + '</td><td>' + item.lname + '</td></tr>';
        });
        $('#records_table tbody').append(trHTML);
        $('#records_table').DataTable({
            "bLengthChange": false,
            "paging":false,
        });
        $('#records_table').DataTable().fnDestroy();

      }

  });

问题答案:

销毁dataTables实例的主要原因是,如果您想更改初始化选项(例如change
paging等)。或者是否应该更改表结构。这些情况似乎都不是这里吗?要回答这个问题,销毁和重新初始化表的最安全方法是使用简写选项destroy: true

var table = $('#records_table').DataTable({
   ...
   destroy : true
});

更进一步,我认为您正在做一些倒退。

  • 为什么用jQuery $('#records_table tbody').empty();而不是清空表table.clear()
  • 为什么使用jQuery $('#records_table tbody').append(trHTML);而不是使用注入记录table.row.add([...])

这是一个类似于问题中的代码方案,每次显示模式时,它都会重新初始化dataTable而不会发生冲突:

var table;
$('#modal').on('show.bs.modal', function() {
   $.ajax({
      url: url,
      dataType: 'JSON',
      success: function(response) {
         var response = $.parseJSON(response.contents);

         //clear the table, if it exists
         if (table) table.clear();

         //reinitialise the dataTable   
         table = $('#records_table').DataTable({
           destroy: true,
           bLengthChange: false,
           paging: false
         });

         $.each(response, function(i, item) {
           console.log("inserting", item);
           table.row.add([
             item.name,
             item.position
           ]).draw();
         });
       }
    });
});

参见演示-> http://jsfiddle.net/bz958dxj/

但是,您实际上根本不需要破坏表,这只会降低性能:

//global table object
table = $('#records_table').DataTable({
   bLengthChange: false,
   paging: false
});

$('#modal').on('show.bs.modal', function() {
   $.ajax({
      url: url,
      dataType: 'JSON',
      success: function(response) {
         var response = $.parseJSON(response.contents);

         //clear the table
         table.clear();

         //insert data 
         $.each(response, function(i, item) {
           console.log("inserting", item);
           table.row.add([
             item.name,
             item.position
           ]).draw();
         });
       }
    });
});

演示-> http://jsfiddle.net/8mjke9ua/

注意 :我只是assume基于问题中的引用,.modal-header在讨论引导程序模态。

注意
:请注意$.parseJSON(response.contents),您应该像在问题中一样进行操作。这样做的唯一原因是示例通过代理来避免同源策略。



 类似资料:
  • 对于“何时”有很多很好的答案,比如在这个线程中——静态类初始化何时发生?现在我的问题是“如何”。这是斯蒂芬C.的回答中的一段话 类静态初始化通常在第一次发生以下事件之前立即发生: 将创建该类的一个实例, 调用该类的静态方法, 已分配类的静态字段, 使用非恒定静态场,或 对于顶级类,执行词汇嵌套在类中的assert语句 那么它是如何在内部完成的呢?每个可能触发初始化的指令都用包装?任何工作的细节:-

  • 问题内容: 我有一个显示所有员工的数据表。它适用于所有员工。我有一个选择标签,其中包含员工类型,例如,并且在更改员工类型时,我正在调用一个函数并传递所选的员工类型。 在ajax响应中获取所需和正确的数据,但引发警告 我试图摧毁它,但是没有运气。 也尝试过 它清除表并显示新添加的数据,但每次都添加带有列名的新排序图像。 这是我的代码段。 提前致谢。 问题答案: 在当前版本的DataTables(1.

  • 初始化数据 打开MainSetup类,在Daos语句后面插入新建根用户的代码 // 初始化默认根用户 if (dao.count(User.class) == 0) { User user = new User(); user.setName("admin"); user.setPassword

  • 本文向大家介绍datatables 初始化最小数据表:,包括了datatables 初始化最小数据表:的使用技巧和注意事项,需要的朋友参考一下 示例 以下代码会将ID为的表tableid转换为DataTable,并返回DataTables API实例: 将此代码与以下代码进行比较,该代码会将表转换为DataTable,但不会返回DataTables API实例: 有关使用DataTables AP

  • 问题内容: 无论如何,Java中是否有删除数据(例如,变量值,对象)并确保不能从内存中恢复数据的方法?在Java中分配变量是否会从内存中删除值?有任何想法吗?适用于其他语言的答案也是可以接受的。 问题答案: 由于虚拟内存的奇妙,几乎不可能以完全无法检索的方式从内存中删除某些内容。最好的选择是将值字段清零。然而: 这并不意味着该对象的旧(未清零)副本不会保留在未使用的交换页面上,该页面可能会在重新启

  • 游戏活动中: 这也适用于: