2012-11-01 2 views
0

DataTables 및 필터 기능을 사용하여 상속 한 프로젝트에 몇 가지 문제가 있습니다.DataTables로 필터링 된 행 식별

문제는 테이블을 채 웁니다 주요 기능으로는 다음과 같은 코드를 가지고 있다는 것입니다 : 내가 3 선이 거의 쓸모없는 것을 알고 이제

var rowPos = mainTable.fnAddData(tableData, false)[0]; 
var rowData = mainTable.fnSettings().aoData[rowPos]; 

$(rowData.nTr).attr("id", "UID" + id); // Since the id doesn't always match the row 

rowData.ID = id; 

을 fnAddData의 '거짓'인수하지 않는 한 'true'로 설정됩니다. 이는 HTML 요소가 'false'로 설정되었을 때 실제로 DOM에 존재하지 않으므로 'id'속성을 설정할 방법이 없기 때문입니다.

테이블에 수백 개의 행을 추가 할 때 약 4 초 만에 테이블을 렌더링하므로 'true'를 사용할 수 없습니다. 그러나 '거짓'을 사용하면 테이블을 거의 순간적으로 렌더링합니다 (1 초 미만). 따라서 'fnAddData()'에서 'true'플래그를 사용하는 것은 옵션이 아닙니다.

나는 마지막 줄이 뭔가를하고있는 것처럼 보이지만 나는 DataTables 웹 사이트에서 그 문서를 찾으려고 노력했지만 가치있는 것을 찾을 수없는 것 같습니다. 나는 누군가가 UID (unique record ID)를 실제 행 번호에 바인딩 할 수 있다고 가정하고 있는데, 이는 필수적으로 필요한 것이다.

내가 가진 코드는 또한이 때의 'id'속성을 설정하려고 'fnRowCallback'의 사용을합니다 :

var id = mainTable.fnSettings().aoData[tablePos].ID; 
$(row).attr("id", "UID" + id); // Since the id doesn't always match the row 

주요 문제는하지 않는 것이다 작업! 테이블 필터를 적용하고 'fnRowCallback'에서 'UID'3 인 레코드를 제외한 모든 레코드를 의도적으로 필터링하면 'id'변수가 0으로 설정됩니다. 따라서 속성 세트는 항상 'UID0'이며 모든 종류의 나쁜 참조.

테이블 행의 데이터베이스 레코드 ID를 올바르게 지정하는 방법이 있습니까? 그런 다음 'fnRowCallback'함수와 같이 나중에 참조하십시오. 아니면 누군가가 알아낼 수있는 다른 트릭이 있습니까?

시간과 답변에 미리 감사드립니다.

업데이트 : 2012.11.01 12:33 - 지금까지 다양한 결과를 바탕으로 답변을 추가했습니다. 여기 파고의 조금을하고 있었어요

답변

0

은 ... 지금까지 내 결론이다

나는이 SO ('goreSplatter'에 의해) 내가 덤프 할 수 page이었다에서 발견 자바 스크립트 객체 검사를 사용하여 다양한 DataTables 개체

'rowData'개체가 예상대로 작은 컨테이너라는 것을 알게되었습니다. 그리고 'rowData.ID'속성이 원래이 데이터 구조에 존재하지 않는다는 것을 알게되었습니다. 응용 프로그램 개발자가 직접 삽입했다고 생각합니다.

'fnRowCallback()'함수에서 동일한 객체 검사를 수행하여 'ID'를 초기화 한 초기 'rowData'를 찾습니다. 다음과 같이 나는 그것을 발견 :

var rowData = mainTable.fnSettings().aoData[tablePos]; 

을 그리고 난 'rowData.ID'의 값을 덤프 때 예상대로 내 'ID'값이 제대로 설정되어 있음을 깨달았다.

내 필터를 할 때 문제가 발생합니다! 'rowData.ID'는 어떤 이유로 든 항상 '0'인 것처럼 보입니다.DataTables는 개체의 복사본을 가져 오지만 모르는 속성을 설정하지 않으므로 '0'이됩니다.

그래서 분명히 버그입니다 (제 의견으로는)! DataTables 사용자에게 연락하여 사용자가 사용자 지정 응용 프로그램 데이터를 행에 바인딩하고 필터링 프로세스 중에 이러한 속성을 설정할 수 있는지 확인하는 방법을 확인합니다.

나중에 추가 조사 결과를보고 할 예정입니다.