Envoyé par : jilome
Date : 04/05/2005 09:43
Bonjour,
Après avoir longuement parcourus les principaux sites autour de xul je me décide à initier cette discussion....
Nous développons actuellement une application xul accessible par http dans laquelle les différentes arbres sont associés à des templates RDF produits depuis des bases de données (le RDF est généré par du PHP en quelque sorte).
Nous rencontrons de très grandes difficultés avec la gestion des caches. Nous avons pourtant tout testé depuis les rebuild() refresh() les variables de configuration de firefox, .... Rien à faire, rien ne marche .... Les RDF restent inchangées...
Cordialement.
Envoyé par : Lapinator
Date : 04/05/2005 10:16
la solution la plus simple est d'utiliser une variable qui change à chaque fois, j'ai repris l'idée du script de monitoring de OVH.
var appendix=Math.random(); var dsUrl=uriRDF+"gen_rdf.php?session="+session+"&a="+appendix; tree.setAttribute('datasources', ''); tree.setAttribute('datasources', dsUrl);
si sa peut aider :)
Envoyé par : jilome
Date : 04/05/2005 10:51
E X C E L L E N T E - I D E E
Je teste de suite et je complète !
Ca marche 5/5 sur un menupopup
<script language="JavaScript"> function updateLdap(m) { var update=Math.random(); var dsUrl="ldap_rdf.php?update="+update; m.setAttribute('datasources',dsUrl); } </script>
...
<menupopup datasources="ldap_rdf.php" ref="urn:ldap:people" onpopupshowing="updateLdap(this)">
Reste un petit problème de flashing sur lequel je travail...
J'avais vu des choses proches avec les headers envoyés depuis PHP et expiry mais sans réussir à mettre en oeuvre ces solutions.
Envoyé par : Lapinator
Date : 19/05/2005 23:41
je me suis réataché a ce pb, j'ai sortie ce code suivant qui refresh tres les datasources sans passer par l'astuce que je t'ai donner, j'ai fait ce bout de code en cherchant à faire éxecuté une fonction a la fin du téléchargement du datasources, en clair mettre un Observer sur le datasources ^^, je suis passer une fois n'est pas coutume par le XPCOM
voilà le bout de code commenté ^^
var Observer = { onBeginLoad : function(sink){}, onInterrupt : function(sink){}, onResume : function(sink){}, onError : function(sink,status,msg){}, onEndLoad : function(sink){ sink.removeXMLSinkObserver(this); sink.QueryInterface(Components.interfaces.nsIRDFDataSource); document.getElementById('treePays').view.selection.select(0); } }; var uniq=false; function init(){ if(uniq) return; uniq=true; document.title='Liste des Pays'; loadDatasource() } function loadDatasource() { var tree = document.getElementById('tree'); var dsUrl=uriRDF+"pays.php?session="+session+"&allpays"; //Ancien bout de code pour le chargement des droits //treePays.setAttribute('datasources', ''); //treePays.setAttribute('datasources', dsUrl); //netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); datasource = RDF.GetDataSource(dsUrl); var remote = datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); // on ajoute L'Observer sur le datasource datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink).addXMLSinkObserver(Observer); if (remote.loaded) { tree.database.AddDataSource(datasource); tree.builder.rebuild(); } else { tree.database.AddDataSource(datasource); } } function reloadTree(){ try { netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink).addXMLSinkObserver(Observer); datasource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Refresh(false); tree = document.getElementById('tree'); } catch(e) { alert(e); } }
Un peut dure avec le petit cadre. Sinon pour les âmes attentifs, qui on remarqué que j'avais repris le code de http://www.xulfr.org/wiki/SourceDeDonnee(..) en lui apportant des modifications, je trouve que les codes suivants dans les 2 derniers blocs sont en trops et pause des problemmes de compréhension :
var sink = datasource.?QueryInterface(Components.interfaces.nsIRDFXMLSink);
et
var sink = datasource.?QueryInterface(Components.interfaces.nsIRDFXMLSink); sink.addXMLSinkObserver(Observer);
Par contre je rajouterai en dessous un petit texte qui expliquerait comment on peut rajouter un Observer dans les exemples si dessus
à savoir la création d'un observer:
var Observer = { onBeginLoad : function(sink){}, onInterrupt : function(sink){}, onResume : function(sink){}, onError : function(sink,status,msg){}, onEndLoad : function(sink){ sink.removeXMLSinkObserver(this); sink.QueryInterface(Components.interfaces.nsIRDFDataSource); //Selection du 1er élément de l'arbre quand celui ci est fini de charger //A noté aussi que cette commande envoie un signal onselect sur le tree document.getElementById('tree').view.selection.select(0); }
et la liason sur un datasource de la façon suivante :
datasource.QueryInterface(Components.interfaces.nsIRDFXMLSink).addXMLSinkObserver(Observer);
Voilà, j'espere que ma contribution sera utile :p
Envoyé par : laurentj
Date : 20/05/2005 10:38
Si tu trouves qu'il y a des choses obscures dans le wiki, édite directement les pages pour apporter les précisions ! n'attend pas qu'on te dise ok
Le wiki est fait pour ça, pour que chacun puisse apporter sa contribution. Si on l'apporte dans le forum, ça va être perdu.. (qui ira lire ton message dans 3 mois ? :-p )
Envoyé par : Lapinator
Date : 20/05/2005 19:50
J'ai apporté ma contribution sur http://www.xulfr.org/wiki/SourceDeDonnee(..). mais comme c'est la première fois que je fait une contribution faudra vérrifier ;o
Envoyé par : Utilisateur anonyme
Date : 25/07/2005 19:03
ou tout simplement document.getElementById('id').builder.refresh() ...
c'était aussi simple que cela ! A+
Envoyé par : laurentj
Date : 28/07/2005 17:49
sberthelot : justement non. ça ne fonctionne pas toujours.
Envoyé par : neolao
Date : 05/10/2006 22:07
J'ai essayé la technique avec le Refresh, ça marche mal. Ca me reconstruit mon arbre en oubliant des items.
C'est dommage, parce que cette technique permet de garder les containers déployés.
Le post date de l'année dernière, alors peut-être qu'il y a du nouveau pour actualiser correctement la source de données.
En attendant, le random sur l'url marche mais c'est pas génial.
Envoyé par : simboy
Date : 12/11/2006 17:37
La technique de lapinator est très séduisante, mais malheureusement elle ne fonctionne que dans le cas où on programme un composant mozilla installé sur le client. J'essaie de travailler sur une appli qui ne serait pas téléchargée sous la forme d'un plugin, mais simplement accessible à partir d'un site web. Du coup, impossible d'acceder aux interfaces privilégiées proposées. Et la solution qui consiste à hacker l'url à chaque requête donne un résultat assez mauvais.
Navigant sur le site de Mozilla, j'ai trouvé au moins trois bugs qui semble être liés à ce problème (68306, 241827 et 302090), le plus vieux datant de 2001, associés à des priorités dérisoires... (Peut-être qu'un vote massif sur ces bugs permettrait de les rappeler aux développeurs ?).
Quelqu'un serait-il tombé sur une solution élégante, au moins du point de vue de l'utilisateur, qui fonctionnerait dans le cas de fichiers xul hostés sur un serveur distant, donc sans les privilèges d'un plugin ?
Envoyé par : optyler
Date : 15/11/2006 11:22
Bonjour,
je voulais juste comprendre à quoi servait la fonction reloadTree() puisqu'elle ne semble jamais etre appelée ...
merci :)
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.