Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Des Listitem "collapsed" laissent des "trous" après filtre, comment peut-on résoudre le problème ?

Envoyé par : Raphael

Date : 21/10/2006 17:06

Bonjour, j'ai un listbox dans lequel j'ai mis une liste d'items que je veux filtrer. Pour éviter au maximum de gaspiller des ressources en effaçant et en reconstruisant mon listbox à chaque changement de mon filtre, voilà ce que je fais :

  • Je charge tous mes items dans mon listbox au lancement de mon application.
  • Mon filtre composé de différents menulist agit en mettant un attribut collapsed aux items à cacher de cette manière :
// Pour chaque item de monlistbox, on applique le filtre...
for (var i = 0 ; i < $("monlistbox,").getRowCount() ; i++) {
$("monlistbox,").getItemAtIndex(i).collapsed = (...condition de filtre...) ? true : false;
}

Mon filtre en lui-même marche très bien... le problème c'est que mon listbox ne fait que cacher les mauvais et me laisse plein de trous de partout ! Alors que je voudrais que mes items "remontent" et se collent automatiquement. Evidemment, ça semble logique puisque l'attribut collapsed ne fait que cacher si j'ai bien compris...

Mais alors, il faudrait utiliser l'attribut hidden me direz-vous, mais là, ça plante complètement : puisque tous mes index deviennent invisible pour mon application, toutes mes fonctions se basant sur l'index, mon application ne réagit plus correctement. De plus, je peux assister à ce qui ressemble à des bugs graphiques, puisque la ligne effacée semble prendre la ligne du dessous, sans effacer la ligne en question, donc des lignes en double. Parfois, je vois même 2 listhead avec mes titres de colonne l'une au-dessous de l'autre !

Bref, je ne sais vraiment pas comment me tirer de ce mauvais pas... J'aimerais si possible éviter de basculer vers une solution lourde comme : Effacement de tout le listbox + Re-remplissage complet à chaque filtrage.

Voyez-vous et comprenez-vous mon problème ? Et connaissez-vous un moyen de me sortir de ce mauvais pas ?

Merci énormément pour votre aide.

# Re: Des Listitem "collapsed" laissent des "trous" après filtre, comment peut-on résoudre le problème ?

Envoyé par : Raphael

Date : 21/10/2006 20:58

Bon, j'ai modifié mon code pour essayer la méthode :

  • Effacement du listbox complet
  • Remplissage avec seulement les bons items

Ca marche... mais pour l'instant, je n'ai que quelques entrées et j'en aurai bientôt plusieurs milliers, je me demande donc si ce code ne génère pas trop de calculs :

function clear(listbox)
{
var rows = $(listbox).getRowCount();
for (var i = 0 ; i < rows ; i++) {
$(listbox).removeItemAt(0);
}
}
clear('cardlist');
// Pour chaque item de monlistbox, on applique le filtre...
for (var i = 0 ; i < $("monlistbox,").getRowCount() ; i++) {
if (condition filtre réalisée)
{
var item = document.createElement('listitem');
			item.setAttribute('Card_Index', i);
		var cell1 = document.createElement('listcell');
			cell1.setAttribute('label', cards[i].Reference+"  ");
		var cell2 = document.createElement('listcell');
			cell2.setAttribute('label', cards[i].Name);
		item.appendChild(cell1);
		item.appendChild(cell2);
		$("cardlist").appendChild(item);
}
}

Car je fais une première boucle de plusieurs milliers de lignes pour effacer, puis une 2° fois mais pour le reremplir mon listbox et qui contient de la création d'éléments XUL, et je ne sais pas si ça prend beaucoup de temps...

Qu'en pensez-vous ? Y a-t-il plus léger ?

# Re: Des Listitem "collapsed" laissent des "trous" après filtre, comment peut-on résoudre le problème ?

Envoyé par : syl

Date : 22/10/2006 11:30

Pourquoi ne pas utiliser plutot un tree avec le systeme de template et le flag "dont-build-content". Les performances sont au rendez-vous et tu peux utiliser des rules pour filtrer efficacement tes lignes.

De plus si tu as des milliers d'entrées, ton fichier XUL va etre si tu crée "en dur" tes elements <listcell>, tu auras autant de balise que d'enregistrement.

Syl

# Re: Des Listitem "collapsed" laissent des "trous" après filtre, comment peut-on résoudre le problème ?

Envoyé par : Raphael

Date : 22/10/2006 17:39

Mais il est impossible de créer des templates sans RDF non ? Et moi ma source provient d'un fichier SQLite3...

A moins que je charge tout mon fichier SQLite3 dans un RDF au chargement ?

# Re: Des Listitem "collapsed" laissent des "trous" après filtre, comment peut-on résoudre le problème ?

Envoyé par : syl

Date : 22/10/2006 20:34

Effectivement, des template avec autre chose que du RDF , c'est pour plus tard. Je ne connais pas l'interfacage avec SQLite, mais tu dois peut etre pouvoir créer ta source RDF en mémoire à l'aide de XPCOM. voir http://xulfr.org/xulplanet/mozsdk/rdfsou(..)

# Re: Des Listitem "collapsed" laissent des "trous" après filtre, comment peut-on résoudre le problème ?

Envoyé par : syl

Date : 23/10/2006 11:17

J'y pense aussi, tu pourrais peut-etre utiliser des vues d'arbres personnalisées

Syl

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.