2012-11-01 74 views
0

我遇到了一些我正在繼承的使用DataTables和過濾器功能的項目問題。使用DataTable識別已過濾的行

的問題是,在其中填充表的主要功能,它具有以下代碼:

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; 

現在我知道,3號線是幾乎無用的,除非fnAddData的「假」的說法被設置爲'true'。這是因爲當設置爲'false'時,HTML元素實際上不存在於DOM中,因此無法設置'id'屬性。

我不能使用'true',因爲當向表中添加幾百行時,它會在大約4秒內渲染表格。但是當我使用「假」時,它幾乎是瞬間呈現(不到一秒)。所以在'fnAddData()'中使用'true'標誌甚至不是一個選項。

我看到最後一行似乎在做某些事情,但我試圖在DataTables網站上找到相關文檔,但似乎找不到任何有價值的東西。我假設它允許某人綁定一個UID(唯一記錄ID)到實際的行號,這是必需的。

我的代碼也使用了「fnRowCallback」,它試圖在這個時候設置「id」屬性,如:

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

的主要問題是,它似乎並沒有工作!如果我應用一個表格過濾器並有意濾除除了應該是'UID'3的記錄以外的所有記錄,在'fnRowCallback'中,我的'id'變量被設置爲0.因此,該屬性集合總是'UID0'各種不良的參考。

有沒有辦法將我的數據庫記錄ID正確地分配給錶行?然後再引用它們,比如在'fnRowCallback'函數中?還是有人設法找出其他一些詭計?

在此先感謝您的時間和迴應!

更新:2012.11.01 12:33 - 我已經根據各種調查結果添加了以下答案!

回答

0

我已經做了一些挖的,這裏是我的結論,那麼遠,

使用JavaScript對象檢查,我對這個SO page(由「goreSplatter」)我能找到傾倒各種DataTables對象。

我意識到我的'rowData'對象是一個很小的容器,正如所料。並意識到'rowData.ID'屬性原本不存在於此數據結構中。我猜應用程序開發人員自己插入了它,這是有道理的。

從'fnRowCallback()'函數,我做了相同的對象檢查,試圖找到初始化'ID'的初始'rowData'。我發現如下:

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

當我傾倒的「rowData.ID」的價值,我意識到,作爲我的預期「ID」值設置正確。

當我做我的過濾器時發生問題!由於某種原因,'rowData.ID'似乎總是'0'。看起來DataTables獲取對象的副本,但沒有設置它不知道的任何屬性,因此結果爲'0'。

所以這絕對是一個錯誤(至少在我看來)!我將聯繫DataTables人員,瞭解他們希望用戶如何將自定義應用程序數據綁定到他們的行,並查看他們是否也可以在過濾過程中設置這些屬性。

我稍後會報告任何進一步的發現。