Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Tree / RDF / quantité de données

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

# Re: Tree / RDF / quantité de données

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.

# Re: Tree / RDF / quantité de données

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 :)

# Re: Tree / RDF / quantité de données

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.

# Re: Tree / RDF / quantité de données

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 :

  1. . je creer mon objet qui respect l'interface nsIXULTreeBuilderObserver.
  2. . je récupère le service d'observation
  3. . je déclare mon objet à mon observateur

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

# Re: Tree / RDF / quantité de données

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.

# Re: Tree / RDF / quantité de données

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

# Re: Tree / RDF / quantité de données

Envoyé par : wako

Date : 20/04/2006 11:43

Un post inutil

# Re: Tree / RDF / quantité de données

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);

# Re: Tree / RDF / quantité de données

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.