Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Changement d'une <rule> avec du javascript

Envoyé par : kiouk

Date : 14/08/2004 08:03

Bonjour,

Je suis en train de construire une application composé de deux parties :

  • en haut une liste de personnes (contenue dans un tree)
  • en bas une série de labels contenant les données de la personne sélectionnée

J'extrais toutes mes données d'un fichier RDF.

Ainsi, je remplis mon arbre et récupère la donnée nom lors d'un clique de l'utilisateur.

Mais je n'arrive pas à introduire le nom comme règle dans ma template qui dois me générer mes labels du bas.

Un peu de code :

<vbox id='personne' datasources="personne.rdf" ref="http://www.kiwi.org/personne">
 <template>
   <rule id='requettePersonne' PERSONNE:nom="">
     <hbox uri="rdf:*">
       <label value="rdf:http://www.kiwi.org/rdf#nom"/>
     </hbox>
   </rule>
 </template>
</vbox>

Quand je remplis cette partie à la main et que je mets <rule id='requettePersonne' PERSONNE:nom="dupont">, par exemple, l'affichage s'effectue correctement.

Mais lors de l'execution du javascript suivant :

function affichePersonne (treeId)
{
 var tree = document.getElementById(treeId);
 var start = new Object();
 var end = new Object();
 
 var numRanges = tree.view.selection.getRangeCount();

 for (var t=0; t<numRanges; t++){
 tree.view.selection.getRangeAt(t,start,end);
 for (var v=start.value; v<=end.value; v++)
 {
   var arbre = document.getElementById('requettePersonne')
   if(tree.view.getCellText(v,'nom')!="")
   {
     arbre.setAttribute("PERSONNE:nom", tree.view.getCellText(v,'nom'));
   }
   else
   {
     arbre.setAttribute("PERSONNE:nom", '');
   }
 }
}

Quand je regarde les propriétés de mon élément "requettePersonne" dans le DOM inspector, je m'apperçois qu'il n'y à plus la propriété "PERSONNE:nom" mais qu'il n'y à plus que "nom" (qui est par contre à la bonne valeur). Mon filtre n'est donc pas appliqué.

Je pense que le problème vient du fait que le caractère ":" est spécial et ne peut pas être passé comme attribut mais je ne vois pas comment contourner simplement le problème.

Merci pour vos réponses...

@+

Alexandre CUCUMEL (Kiouk)

# Re: Changement d'une <rule> avec du javascript

Envoyé par : laurentj

Date : 16/08/2004 23:34

à la lecture de ton code xml, j'en deduit que PERSONNE est un alias d'un namespace.

Donc normalement, tu devrais :

  • declarer le namespace PERSONNE dans le fichier xul
  • utiliser setAttributeNS et non setAttribute

# Re: Changement d'une <rule> avec du javascript

Envoyé par : kiouk

Date : 17/08/2004 06:01

Ca ne fonctionne toujours pas,

j'ai déjà déclaré le namespace au début de mon fichier. J'ai essayé la fonction setAttributeNS de plusieurs manières mais quoi que je face, il me rajoute toujours un attribut "nom" et ignore complètement mon "PERSONNE:nom".

Je pense que si je n'y arrive vraiement pas, je vais essayer avec la manière brute (XPCOM) mais ça m'embète un peu car je voulais faire une appli web et avec XPCOM je suis obligé d'installer.

Merci.

# Re: Changement d'une <rule> avec du javascript

Envoyé par : laurentj

Date : 17/08/2004 16:47

Juste une chose pour m'enlever d'un doute. tu fais bien :

<window
   xmlns:PERSONNE="http://tonnamespace" >

puis

 arbre.setAttributeNS('http://tonnamespace', 'nom', 'blabla');

?

Le plus important, ce n'est pas ce que te renvoie l'attribut name ou tagName de ton element, mais sa propriété namespaceURI. (mais pour les attributs, le dom inspector n'affiche pas cette propriété...)

Bon, sinon, il y a une chose à faire aussi je pense pour que ta nouvelle règle soit appliquée : recharger la source de donnée. Pour les versions récentes de mozilla/firefox, il suffit juste de modifier l'attribut datasources de ton tree (le mettre à vide puis remettre l'url du fichier rdf pour un simple rechargement)

# Re: Changement d'une <rule> avec du javascript

Envoyé par : kiouk

Date : 17/08/2004 18:24

Hourra !!!! Ca marche !!!!

Merci beaucoup.

En fait j'avais presque tout faux ;-)

Il faut :

  • Déclarer le namespace au début, (c'est le seul truc que j'avais fait)
  • Utiliser setAttributeNS,
  • rafraichir la source

Encore merci pour ton aide et pour ce superbe site!!!

Alexandre CUCUMEL (Kiouk)

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.