2017-12-02 167 views
0

我創建一個jQuery數據表中的一類,它的工作原理,但我有與下面的代碼段的一些問題:的Javascript傳遞參數箭頭功能

let table = $("#" + this.name).DataTable(); 
table.on('click', 'tr td.details-control', function() { 
     let detailRows = []; 
     let tr = $(this).closest('tr'); 
     let row = table.row(tr); 
     let idx = $.inArray(tr.attr('id'), detailRows); 

     if (row.child.isShown()) { 
      tr.removeClass('details'); 
      row.child.hide(); 

      detailRows.splice(idx, 1); 
     } 
     else { 
      tr.addClass('details'); 
      let rowData = table.row(tr).data(); 
      row.child(this.formatChildRows(rowData)).show(); 

      if (idx === -1) { 
       detailRows.push(tr.attr('id')); 
      } 
     } 
    }); 

,因爲道路「這個」作品

table.on('click', 'tr td.details-control', (event) => { 
    ... 
}); 

功能現在運行但「表」:在JavaScript中,函數formatChildRows不再發現,因爲這不再是指類,但到錶行,我改變,像這樣的代碼解決了這個變量不再可訪問,因爲它在箭頭函數中未定義。

我嘗試很多東西,如:

evt => function(table) {} 

代替:

(event) => 

我想這可能工作,但在函數內部的代碼不再被某種原因執行。

任何想法?

+1

除非您在回調中用'(table)=>'或'var table'替代它,或者在'table'應該繼續引用原始'table'值之後更改它的值。你能告訴我們一些代碼不完整的例子嗎? – JLRishe

+1

'函數現在運行,但「表」變量不再可訪問,因爲它在箭頭函數中是未定義的。「 - >否?! –

回答

0

這應該工作:

const self = this; 
table.on('click', 'tr td.details-control', function (event){ 
    row.child(self.formatChildRows(rowData)).show(); 
    ... 
}); 

但如果這是可能的,你應該避免this關鍵字,例如,你應該直接引用對象objectName.formatChildRows()