2017-12-02 2 views
0

ich eine Klasse haben eine jquery Datentabelle für die Erstellung, es funktioniert, aber ich mit dem folgenden Code einige Frage habe:Javascript vorbei Parameter mit Pfeil Funktion

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')); 
      } 
     } 
    }); 

Aufgrund der Art, „diese“ Werke in JavaScript, um mehr die Funktion formatChildRows da diese nicht mehr in der Klasse bezeichnet wird nein, sondern auf die Tabellenzeile gefunden, löste ich dies durch Änderung des Codes wie folgt:

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

die Funktion läuft nun aber die „Tabelle“ Die Variable ist nicht mehr zugänglich, da sie in der Pfeilfunktion nicht definiert ist .

Ich habe versucht, viele Dinge wie:

evt => function(table) {} 

statt:

(event) => 

Ich dachte, das funktionieren könnte, aber der Code innerhalb der Funktion nicht mehr aus irgendeinem Grund ausgeführt wird.

Irgendwelche Ideen?

+1

Es sei denn, Sie ersetzen es mit etwas wie '(table) =>' oder 'var table' innerhalb des Callbacks oder ändern seinen Wert nach der Tatsache' table' sollte sich weiterhin auf den ursprünglichen 'table' Wert beziehen. Können Sie uns ein vollständiges Beispiel eines Codes zeigen, in dem dies nicht funktioniert? – JLRishe

+1

'Die Funktion läuft jetzt, aber die Variable" table "ist nicht mehr zugänglich, da sie in der Pfeilfunktion undefiniert ist.' -> NEIN ?! –

Antwort

0

sollte diese Arbeit:

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

Aber wenn es möglich ist, sollten Sie this Schlüsselwort, zum Beispiel vermeiden, sollten Sie direkt objectName.formatChildRows() auf Objekt verweisen.