0

DataTablesとそのフィルター機能を使用している継承したプロジェクトにいくつか問題があります。

問題は、テーブルにデータを入力するmain関数に、次のコードが含まれていることです。

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の「false」引数が「true」に設定されていない限り、3行目はほとんど役に立たないことがわかりました。これは、「false」に設定するとHTML要素が実際にはDOMに存在しないため、「id」属性を設定する方法がないためです。

テーブルに数百行を追加すると、約4秒でテーブルがレンダリングされるため、「true」は使用できません。しかし、「false」を使用すると、テーブルがほぼ瞬時にレンダリングされます(1秒未満)。したがって、「fnAddData()」で「true」フラグを使用することもオプションではありません。

最後の行が何かをしているように見えますが、DataTables Webサイトでそのドキュメントを見つけようとしましたが、価値のあるものが見つからないようです。誰かが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-これまでのさまざまな調査結果に基づいて、以下に回答を追加しました!

4

1 に答える 1