Envoyé par : syl
Date : 03/01/2007 16:17
Bonjour à tous (et bonne année !)
Je me trouve confronté à un souci assez étrange :
Lors du chargement de la fenetre principale de mon application XUL, j'affecte dynamiquement les datasources de mes listes déroulantes et arbres sur l'évenement onload de ma fenetre via le javascript :
document.getElementById("LD_selectiontheme1").setAttribute("datasources", serveur1+"?action=peupleldthemes");
Ce code correspondant au XUL suivant :
<menulist id="LD_selectiontheme1" datasources="" ref="urn:data" razable="true"> <template> <menupopup> <menuitem uri="rdf:*" label="rdf:http://www.aase.org/themes/rdf#label" value="rdf:http://www.aase.org/themes/rdf#id"/> </menupopup> </template> </menulist>
Ce procédé est le meme pour la dizaine de liste déroulante de la fenetre.
Le probleme est le suivant : J'ai codé une fonction de connexion à mon serveur PHP qui m'ouvre une fenetre de dialogue pour saisie login/pwd. Lorsque, pour le déboggage, je ne lance pas cette fenetre (Dans ce cas ,mon php se connecte à la base de donnée immédiatement) Mes listes déroulantes se remplissent parfaitement.
Mais si j'ouvre la connexion à la Base de donnée via mon formulaire (connexion active apres le lancement de l'appli), j'ai 2 de mes listes déroulantes qui restent vides (alors que les autres sont correctement remplies, mon serveur envoi le bon RDF, et l'inspecteur DOM me donne les bons attributs sur les menulist)
Bien sur dans ma fonction de connexion, apres identification, je prévoit un rafraichissement des datasources. Voici ma fonction pour l'identification (déclenché par un bouton):
function confirm_identification(reponse) { if(reponse.status == 1) { var nom_user = reponse.data.getElementsByTagName("user")[0].textContent; var priv_user = reponse.data.getElementsByTagName("priv")[0].textContent; affiMessage("Identification correcte", false); //initialisation du braodcaster document.getElementById("BC_utilisateur").setAttribute("value",nom_user); document.getElementById("BC_utilisateur").setAttribute("priv",priv_user); document.getElementById("BC_nonident").setAttribute("disable",true); //rafraichissement des templates contenu dans la fenetre appelante var filtre = { acceptNode : function(n) { if (n.hasAttribute("datasources")) return NodeFilter.FILTER_ACCEPT; return NodeFilter.FILTER_SKIP; } }; var tw1 = document.createTreeWalker(document, NodeFilter.SHOW_ALL, filtre, false); while(tw1.nextNode()) { var old_ds = tw1.currentNode.getAttribute("datasources"); tw1.currentNode.setAttribute("datasources", ""); tw1.currentNode.setAttribute("datasources", old_ds); } } else affiMessage(reponse.message, false); } function affiche_login(win_appelante) { var login = new Object(); var pwd = new Object(); var chkbox = new Object(); var p = new Array(); // Présentation du formulairelogin/pwd var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); var retourIdent = promptService.promptUsernameAndPassword(win_appelante, "Identification", "Merci de saisir votre login et votre mot de passe",login, pwd, null, chkbox); if(retourIdent) { var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); p["id1"] = prefs.getCharPref("aase.serveur1"); // URL serveur p["id2"] = prefs.getCharPref("aase.bdd"); // nom base de donnée p["id3"] = login.value; // login p["id4"] = pwd.value; //pwd //Envoi requete d'identification au serveur var r = new Requete("identification", p, confirm_identification); } }
A mon avis il y a un souci de synchronisation, mais je n'arrive pas à identifier le problème.
Merci par avance de vos réponses
Syl
Envoyé par : papy
Date : 03/01/2007 16:25
Je commence à m'intéresser aux datasources depuis peu, donc je ne pense pas que je puisse t'être d'une grande aide, mais au détour d'un lien hypertext sur le sujet il me semble avoir lu qu'il faut mettre l'attribut datasources a rdf:null si tu veux l'affecter plus tard et dynamiquement.
Ca n'explique pas que cela fonctionne pour certaines de tes listes, mais bon on ne sait jamais...
P.S: bonne année à tout le monde aussi tant qu'on y est ;)
Envoyé par : syl
Date : 03/01/2007 17:54
Ca ne fonctionne pas mieux, mais je vais chercher dans ce sens merci
Syl
Envoyé par : syl
Date : 04/01/2007 11:30
Ca y est cela fonctionne, par contre je ne sais pas l'expliquer : Au lieu d'utiliser une méthode rafraichissement par modification de data sources :
var old_ds = tw1.currentNode.getAttribute("datasources"); tw1.currentNode.setAttribute("datasources", ""); tw1.currentNode.setAttribute("datasources", old_ds);
J'ai fait un simple :
tw1.currentNode.builder.refresh();
Par contre l'utilisation de rebuild() à la place de refresh() ne fonctionne pas.
Quelqu'un aurait-il une explication à fournir, parce que c'est un peu frustrant de ne pas comprendre.
Merci
Envoyé par : syl
Date : 04/01/2007 11:32
PS : J'utilise FF 1.5.0.4 sous WIN XP et mes fichiers sont enregistrés dans le chrome
Syl
Envoyé par : papy
Date : 04/01/2007 12:30
Pour les méthodes, rebuild reconstruit ls templates mais ne met pas à jour la source de donnée, tandis que refresh met a jour la source de donnée (le template est reconstruit automatiquement si besoin)
Pour le rafraichissement par modification de data sources, c'est censé fonctionner, mais apparement ca n'est pas le cas :D C'est bon à savoir
P.S: comme dit plus haut, je me base sur ce que j'ai lu dans la doc sur les templates, après je n'ai pas encore vraiment pratiqué
Envoyé par : syl
Date : 04/01/2007 17:53
Merci, Les templates demandent pas mal de notions, donc pas mal de choses à lire, mais c'est quand même très puissant !
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.