Envoyé par : wako
Date : 19/04/2006 11:46
Bonjour,
J'ai un souci et je n'ai pas trouver de solution dans l'historique du forum.
Je dois afficher sous forme d'arbre des données hierarchiques situées dans une base de donnée.
1. Utilisation d'un rdf + template
Le problème : si je genere le rdf en 1 fois, le fichier fait plusieurs Mo (Beaucoup trop pour une application Client / serveur qui passe sur un réseau lent).
L'idée serai donc de creer des rdf avec uniquement les données qui ne sont pas "hidden" et de demander dynamiquement au serveur de generer "la suite" quand un utilisateur ouvre une branche.
Est ce possible ?
2. Création manuel de l'arbre
Est il possible "d'attraper" l'évenement d'ouverture du + situer a gauche des branches ?
Cordialement,
wako
Envoyé par : laurentj
Date : 19/04/2006 11:52
Est ce possible ?
oui, via la propriété builderview, tu peux ajouter un observateur de type nsIXULTreeBuilderObserver. Donc à toi d'implementer cet observateur, qui, lors de l'expansion d'une branche, va charger le contenu rdf correspondant à cette branche (en vérifiant bien sûr avant, dans la liste des datasources, si ledit morceau rdf n'est pas déjà chargé).
Est il possible "d'attraper" l'évenement d'ouverture du + situer a gauche des branches ?
via l'observateur.
Envoyé par : wako
Date : 19/04/2006 14:38
En effet, sa me parrait être une bonne solution.
J'ai essayer de tester, mais je bloque sur l'instentiation de la classe.
var truc = Components.classes["@mozilla.org/xul/xul-tree-builder;1"].createInstance();
J'obtiens cette erreur dans la console javascript
Error: uncaught exception: Permission denied to get property UnnamedClass.classes
Il doit y avoir quelques choses que je n'ai pas saisi :/
wako
PS : on oubli, j'ai pas déclarer l'extention sous FF mais sous mozilla, je laisse le cas, comme sa si un étourdi comme moi fait la même erreur, il trouvera peut être la réponse :)
Envoyé par : laurentj
Date : 19/04/2006 15:50
pourquoi tu veux instancier ça ?? Tu n'a pas besoin de ça. Tu crée juste un objet en respectant l'interface nsIXULTreeBuilderObserver (c'est à dire en créant les mêmes methodes), et tu passe cet objet au builderView via sa méthode addObserver.
Envoyé par : wako
Date : 20/04/2006 10:40
Bonjour,
C'était sans doute par ce que je n'avais pas tout compris :)
Je n'ais hélas toujours pas tout compris.
premiere partie : créer l'objet en respectant l'interface, pas de souci.
La seconde, je ne saisis plus.
j'ai squater ici ce matin et je comprend pas comment appeler les méthodes que j'ai faite.
doit y avoir un truc qui m'échape.
Je vais décrire la structure :
Et maintenant, je ne comprend pas, comment mes méthodes vont être appelé ? j'ai oublier quelque chose ? J'ai fait quelque chose pas comme il le faudrait ?
Merci pour votre aide.
wako
Envoyé par : laurentj
Date : 20/04/2006 10:59
Et maintenant, je ne comprend pas, comment mes méthodes vont être appelé ?
Par le builderView ! C'est donc ton tree, sous les actions des utilisateurs, va appeler les méthodes correspondantes du treeview, mais aussi va appeler chaque observateur qui auront été déclaré.
En gros : tu n'as plus rien à faire. Tes méthodes seront appelées automatiquement au moment qu'il faut.
Le design pattern "observer" est trés utilisé dans mozilla.
Envoyé par : wako
Date : 20/04/2006 11:11
J'ai vraiment du faire dla merde.
Un peu de code
var myObserver = { observe : function (subject, topic, data) { alert(topic); }, onToggleOpenState : function (id) { alert("ici"); }, ... } // récupération du service d'observation var ObserverServ = Components.classes["@mozilla.org/observer-service;1"].\\ getService(Components.interfaces.nsIObserverService); // enregistrement ObserverServ.addObserver(myObserver, "my-tree", false );
Description de la méthode onToggleOpenState
void onToggleOpenState ( PRInt32 index ) Called when an item is opened or closed. Arguments: index
Normalement, si j'ai a peu près compris, à chaque déplis / replis des branches de l'arbre je devrais obtenir l'alerte.
Hélas, non il n'y a pas d'erreur dans la console js.
wako
Envoyé par : laurentj
Date : 20/04/2006 11:46
// récupération du service d'observation var ObserverServ = Components.classes["@mozilla.org/observer-service;1"].\\ getService(Components.interfaces.nsIObserverService);
mais je ne t'ai jamais dis d'utiliser ça !?? ça n'a strictement aucun rapport.
Bon. soyons plus clair.
Première chose lire la réference de la balise tree !! (Nom dou diou !!!)
Je t'ai parlé de sa propriété, builderView. cette propriété contient un objet qui implemente l'interface nsIXULTreeBuilder possédent une méthode addObserver, qui elle même accepte un objet de type nsIXULTreeBuilderObserver.
Donc le code est trés simple :
var tree = document.getElementById("ton_tree"); tree.builderView.addObserver(myObserver);
Envoyé par : wako
Date : 20/04/2006 11:51
Parfait.
En effet je m'etais un peu égaré.
Je vais passer à la seconde parti du problème.
wako
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.