2017-12-02 4 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) => 

を、私は、これはうまくいくかもしれないと思っていないが、関数内のコードは、もはや何らかの理由で実行されています。

アイデア?

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

をしかし、それは可能であるならば、あなたはobjectName.formatChildRows()をオブジェクトに直接参照する必要があります例えば、thisキーワードを回避する必要があります。

+1

コールバック内で '(table)=>'や 'var table'のようなもので置き換えないか、' table'という事実の後でその値を変更しない限り元の 'table'値を参照し続けるべきです。これが機能しないコードの完全な例を私たちに示してもらえますか? – JLRishe

+1

'関数が実行されましたが、" table "変数は矢印関数で定義されていないのでアクセスできなくなりました。" - > NO ?! –

答えて

0

これは動作するはずです。

関連する問題