Tóm tắtDữ liệu về jQuery: Làm cách nào để thêm ID hàng vào mỗi hàng được thêm động?
Tôi đang sử dụng plugin jQuery dataTables tuyệt vời từ http://www.datatables.net. Trong tập lệnh của tôi, tôi tự động thêm hàng dựa trên sự kiện kích hoạt bằng cách sử dụng fnAddData
. Sử dụng fnRowCallback
, tôi thêm vào một ID hàng duy nhất. Điều này đôi khi không thành công và không thêm ID hàng. Trong thử nghiệm có 46 hàng bổ sung, thường từ 6 đến 8 hàng không nhận được ID hàng.
chức năng Add Row
function ps_ins(row)
{
var rowArray = row.split('|');
row = rowArray;
var alarmID = parseInt(row[1],10);
$('#mimicTable').dataTable().fnAddData([
alarmID, 'col2', 'col3', 'col4',
'col5', 'col6', 'col7'
]);
}
Hàng được bổ sung vào bảng một cách chính xác. Bài kiểm tra tôi đang chạy thêm 46 hàng và tất cả xuất hiện như mong đợi.
Thêm ID hàng
Tôi cố gắng để thêm một ID duy nhất cho mỗi hàng vì vậy tôi sau này có thể sửa đổi một hàng cụ thể và đề cập đến nó trong bộ nhớ cache DataTable bằng cách sử dụng một sự kết hợp của fnGetRows và .filter .
Tôi đang làm điều này bằng cách sử dụng fnRowCallback trong giai đoạn khởi tạo. Tôi đã giữ tất cả các cài đặt khác chỉ trong trường hợp có bất kỳ điều gì có thể ảnh hưởng đến sự cố.
$('#mimicTable').dataTable({
"sDom": 'lip<"mimicSpacer">f<"numUnAck">rt',
"sScrollY": "365px",
"aaSorting": [[4,'desc'],[5,'desc']],
"iDisplayLength": 15,
"aLengthMenu": [[15, 50, 100, -1], [15, 50, 100, 'All']],
"bAutoWidth": false,
"aoColumns": [
null,
{ "sWidth": "20%" },
{ "sWidth": "22%" },
{ "sWidth": "9%" },
{ "sWidth": "9%" },
{ "sWidth": "20%" },
{ "sWidth": "20%" }
],
"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
$(nRow).attr("id",'alarmNum' + aData[0]);
return nRow;
}
});
Một console.log
của đối tượng DataTable cho thấy:
Như bạn thấy, # 14 có id hàng và cũng là lớp rowStripe đúng. # 15 (và trở đi) thì không.
Vì vậy, tại sao fnRowCallback không kích hoạt mỗi khi một hàng được thêm vào, chỉ đôi khi? Có thể có cách nào tốt hơn để thêm ID hàng khi hàng được thêm vào?
Cuộc gọi lại có chắc chắn không hoạt động không? Bạn đã thử đăng nhập giá trị của nRow trong hàm 'fnRowCallback' chưa? –
Xin chào Phil, fnRowCallback dường như được gọi nhiều lần nên khó có thể nhận được 46 hàng đầu ra để xem những gì đang xảy ra. – psynnott
người dùng muốn xem jsfiddle nếu họ trả lời các câu hỏi phức tạp hơn (nếu không cần phải phân tích cho họ và họ cứ tiếp tục với câu hỏi tiếp theo) – noob