J'ai trouvé un problème intéressant, et je me demande si j'utilise mal ou néglige quelque chose. J'ai un grand CellTable qui est défilement vertical. Je veux montrer toutes les lignes à la fois au lieu de la pagination traditionnelle. Donc, au bas de ma table, j'ai une ligne que l'utilisateur peut cliquer pour charger 50 lignes de plus. J'ai fourni à la table un constructeur de table personnalisé (setTableBuilder (new Builder());). Lorsque l'utilisateur clique sur "charger plus", j'interroge les données, les ajoute à ListDataProvider et appelle table.setVisibleRange (0, dataProvider.getList(). Size()) ;.GWT CellTable reconstruire inutilement des rangées
Je mis une déclaration de journal dans la méthode
@Override
public void buildRowImpl(Object rowValue, int absRowIndex) {
}
pour voir quand il a été construit des lignes. Je remarque qu'il construirait 0-dataProvider.getList(). Size() (toutes les lignes), puis il construirait oldLength-dataProvider.getList(). Size() (les nouvelles lignes). Par exemple, si j'ai 100 lignes et que je charge 50 autres, il va construire 0-150, puis reconstruire 100-50. Ce que je veux, c'est que ce ne soit que pour construire les nouvelles lignes, évidemment. Donc, je commence le débogage pour voir pourquoi il reconstruit la table entière à chaque fois. Ce que je trouve était en com.google.gwt.user.cellview.client.HasDataPresenter il fixerait la « redrawRequired » drapeau true à la ligne 1325:
else if (range1 == null && range0 != null && range0.getStart() == pageStart
&& (replaceDiff >= oldRowDataCount || replaceDiff > oldPageSize)) {
// Redraw if the new data completely overlaps the old data.
redrawRequired = true;
}
Alors ma question est pourquoi faut-il penser que le nouveau les données chevauchent complètement les anciennes données? Est-ce que j'utilise quelque chose de manière incorrecte, y a-t-il un meilleur moyen? Cela devient assez lent lorsqu'il faut redessiner des milliers de lignes qui n'ont pas besoin d'être redessinées.
Merci, Will
J'ai donc réalisé qu'une partie de l'information contenue dans les 50 nouvelles lignes est chargée async donc quand elle arrive, je l'ai redessinée les nouvelles lignes, c'est pourquoi elle charge toutes les 50 dernières.Je suppose que ce que j'espère trouver est un moyen de forcer la table à augmenter en taille et de ne construire que les nouvelles lignes. – Will