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

    द्वारा डेटा नहीं दिखाई दे रहा मैं के रूप मेंjQuery DataTable डिफ़ॉल्ट

    html पृष्ठ

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

    js कोड

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

    प्रारंभिक लोड पर एक jQuery DataTable है, यह एक खाली तालिका को दर्शाता है। कुछ खोज करने के बाद डेटा आता है। प्रारंभिक लोड पर डिफ़ॉल्ट रूप से डेटा कैसे दिखाएं?

    +0

    this.getData module.getData – devconcept

    +0

    को बदलें यदि अपने स्थापना से [इस plunkr] (http://plnkr.co/edit/KnFfRaQZwp7mWY7n3Ukn अलग किसी भी तरह से है कि आप विस्तार से बता सकता है ? पी = पूर्वावलोकन) क्योंकि मैंने आपके कोड को कॉपी-पेस्ट किया है और ऐसा लगता है कि यह ठीक काम करता है। –

    +0

    @ मार्टिलास्ट, जाहिर है ओपी का 'GetData' एक उदाहरण है, असली कोड नहीं। मुझे लगता है कि वह बाहरी संसाधन से या AJAX द्वारा डेटा लोड करता है। – davidkonrad

    उत्तर

    2

    यह जावास्क्रिप्ट asynchronicity के कारण है। getData() डेटाटेबल प्रारंभिक समय के समय समाप्त नहीं हुआ है। आप कुछ रिफैक्टरिंग कर सकते हैं, इसलिए 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); 
         } 
        }); 
    } 
    
    संबंधित मुद्दे