2015-11-23 74 views
0

我已經使用此代碼爲了在每個原始行下使用數據表的fnCreatedRow回調添加額外的行。原始行是正確更新,但額外的行回調後取出...Datatables - 使用fnCreatedRow添加詳細信息行

fnCreatedRow: function(nRow, aData, iDataIndex) { 
 
    var $nRow = $(nRow), 
 
    $content = $(), 
 
    numIndex = 3; 
 

 
    $nRow.find('td').eq(3).html(''); 
 
    // We add one or multiple sub rows under each row in order to show the accounts details of the client 
 

 
    $.each(aData[3][0], function(e, i) { 
 

 
    if (e === 'profileId') { 
 
     return true; 
 
    } 
 

 
    $content = $content.add($nRow.clone().find('td').eq(numIndex).html(i).end().end()); 
 
    ++numIndex; 
 
    }); 
 

 
    $nRow.after($('<tr>').append($content).html()); 
 
}

有沒有更合適的回調? 我認爲它的工作原理是,如果我在創建完整個表格後執行這些操作,但是如果插件執行循環...爲什麼不使用它?

我不是唯一一個誰都有這個問題: https://datatables.net/forums/discussion/21354/using-fncreatedrow-to-add-detail-rows-working-but-not

我想補充一點,我檢索JSON包含用於第四列的一個陣列。我使用這個數組來構造這些子箭頭。我認爲它不起作用,因爲Datatables期望一個數組或不同於字符串的東西。

+0

行消失,因爲dataTables不知道它們。你根本無法這樣做。 – davidkonrad

+0

有沒有辦法確保Datatables知道它們?用新信息或其他內容更新內部數據? – mysthiq

+0

是的,使用API​​ - 'table.row.add()'/'table.fnAddRow()',但你也應該考慮@Dontfeed代碼方法與子行。 – davidkonrad

回答

1

我會建議尋找到與row.child(),因爲它們在這個例子做你的追加子行:

https://datatables.net/examples/api/row_details.html

的例子也不過不同,因爲它們渲染細節行通過點擊事件 - 然而,它們呈現的方式可能是解決問題的關鍵,而不是使用$ content.add。

+0

在這個例子中,'format'函數返回不是一行的單元格的html內容。我看不出你會如何做你的代碼。我不想在表格中使用按鈕或表格。我想要一個簡單的經典表... – mysthiq

+0

@mysthiq所有格式都是返回一個字符串,我正在討論使用row.child($ your_child_row)將內容追加到行而不是$ content.add –