javascript
  • jquery
  • jquery-datatables
  • 2015-05-20 8 views 5 likes 
    5

    ich jquery Datatable haben alsjQuery Datatable nicht Daten standardmäßig zeigt

    HTML-Seite

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

    js Code

    (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); 
    

    Auf Anfangslast, zeigt es eine leere Tabelle. Die Daten kommen nach einer Suche. Wie werden die Daten standardmäßig beim erstmaligen Laden angezeigt?

    +0

    ändern this.getData zu module.getData – devconcept

    +0

    Könnten Sie das näher erläutern, wenn Ihr Setup in irgendeiner Weise anders als [diese plunkr] (http://plnkr.co/edit/KnFfRaQZwp7mWY7n3Ukn ? p = Vorschau), weil ich Ihren Code kopiert und eingefügt habe. –

    +0

    @MartiLaast, offensichtlich ist OPs 'getData' ein Beispiel, nicht der echte Code. Ich denke, er lädt Daten von einer externen Ressource oder von AJAX. – davidkonrad

    Antwort

    2

    Dies ist wegen Javascript asynchronicity. getData() ist zum Zeitpunkt der Initialisierung der Datentabelle nicht beendet. Sie könnten ein Refactoring durchführen, daher ruft getDataaddTable als Callback auf.

    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() Anrufe getData(callback) mit addTable als param haben addTable die param hatte data hinzugefügt.

    Demo ->http://jsfiddle.net/bLzaepok/

    Ich gehe davon aus Ihrem getData Code nur pro Beispiel ist, und Sie sind mit AJAX (oder was auch immer) IRL. Rufen Sie den Rückruf in den Rückruf:

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