2015-05-20 2 views
5

У меня есть JQuery DataTable какJQuery DataTable не показывает данные по умолчанию

HTML страницы

<div id="content"> 
</div> 

кода расслоение плотной

(function ($) { 
    'use strict'; 

    var module = { 

     addTable: function() { 

      var output = '<table id="table1"></table>'; 
      $('#content').append('<p></p>' + output); 
      var data = []; 
      data = this.getData(); 

      $('#table1').dataTable({ 

       "data": data, 
       "columns": [ 

       { 
        "title": 'Name', 
        mDataProp: 'name', 
        width: '20%' 
       }, 
       { 
        "title": 'Company', 
        mDataProp: 'company' 
       }, 
       { 
        "title": 'Salary', 
        mDataProp: 'salary' 
       }], 

        'scrollY': '400px', 
        'scrollCollapse': false, 
        'paging': false 
      }); 
     }, 

     getData: function() { 

      var arr = []; 

      for (var i = 0; i < 100; i++) { 
        var obj = { 

        name: 'John', 
        company: 'XYZ', 
        salary: '$XYZ' 

       }; 

       arr.push(obj); 
      } 

      return arr; 
     } 
    }; 

    $(document).ready(function() { 

     $('#content').append('Loading....'); 
     module.addTable(); 

    }); 
})(jQuery); 

На начальной загрузки, он показывает пустую таблицу. Данные поступают после выполнения поиска. Как показать данные по умолчанию при начальной загрузке?

+0

Изменение this.getData к module.getData – devconcept

+0

Не могли бы вы уточнить, если установка в любом случае отличается [это plunkr] (http://plnkr.co/edit/KnFfRaQZwp7mWY7n3Ukn ? p = preview), потому что я скопировал ваш код и, похоже, работает нормально. –

+0

@MartiLaast, очевидно, что OP 'getData' является примером, а не реальным кодом. Думаю, он загружает данные из внешнего ресурса или AJAX. – davidkonrad

ответ

2

Это связано с асинхронностью javascripts. getData() не завершен во время инициализации dataTable. Вы можете сделать некоторый рефакторинг, поэтому getData вызывает вместо этого addTable.

var module = { 
     addTable: function (data) { 
      var output = '<table id="table1"></table>'; 
      $('#content').append('<p></p>' + output); 
      $('#table1').dataTable({ 
       "data": data, 
       "columns": [ 
       { 
        "title": 'Name', 
        mDataProp: 'name', 
        width: '20%' 
       }, 
       { 
        "title": 'Company', 
        mDataProp: 'company' 
       }, 
       { 
        "title": 'Salary', 
        mDataProp: 'salary' 
       }], 
        'scrollY': '400px', 
        'scrollCollapse': false, 
        'paging': false 
      }); 
     }, 

     getData: function (callback) { 
      var arr = []; 
      for (var i = 0; i < 100; i++) { 
        var obj = { 
        name: 'John', 
        company: 'XYZ', 
        salary: '$XYZ' 
       }; 
       arr.push(obj); 
      } 
      return callback(arr); 
     }, 

     init : function() { 
      this.getData(this.addTable); 
     } 
    }; 

...

module.init(); 

init() звонки getData(callback) с addTable, как пары, addTable имел пары data добавили.

демо ->http://jsfiddle.net/bLzaepok/

Я предполагаю, что ваш код GetData только на примере, и вы используете AJAX (или любой другой) IRL. Вызов функции обратного вызова в функцию обратного вызова:

getData: function (callback) { 
    $.ajax({ 
     ... 
     success : function(data) { 
      callback(data); 
     } 
    }); 
}