Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Initialisation des écrans

Envoyé par : Eric

Date : 30/11/2005 11:51

Je rencontre un problème récurrent lors d'initialisations d'écrans qui doivent inclure de nombreux scripts.

Je travaille sur une application client/serveur dont les messages sont échangés au format rdf en utilisant httpRequest. Lors de l'initialisation des écrans, il y a lieu en général d'aller chercher une série d'informations sur le serveur pour alimenter les écrans avec des valeurs par défaut, initialiser les drop-down, afficher des informations dans des treeview etc.

La plupart des écrans possèdent donc une fonction onLoadIntl() qui se charge de cette initialisation. Elle est démarrée sur l'event onload de la fenêtre.

Les types de problèmes rencontrés sont les suivants :

  • non initialisation des contentView ou des treeBuilder sur les treeview alimentés par template
  • non initialisation d'éléments nécessaire au fonctionnement correct de certains XBL

Ces problèmes disparaissent si l'on met un timer sur la fonction onLoadIntl pour différer l'initialisation :

function onLoadIntl(){
dump( "ENTER FUNCTION ----> onLoadInit()\n" );

gTimeOut = window.setTimeout(dfrIntl, 200);	

dump( "EXIT FUNCTION  <---- onLoadInit()\n" );	
}
function dfrIntl(){
dump( "ENTER FUNCTION ----> dfrIntl()\n" );
try{	
if(gTimeOut){
window.clearTimeout(gTimeOut);
}
...

mais la méthode est aléatoire et peu élégante.

Tout se passe comme si malgré l'envoi de l'event onload tous les éléments de l'écran n'avaient pas encore été initialisés.

J'aimerais savoir si d'autres personnes rencontrent le même type de problèmes et comment ils les ont résolus.

Merci

# Re: Initialisation des écrans

Envoyé par : hhf

Date : 09/12/2005 23:11

les rdf ce charge en asynchrone par rapport à la page, donc il se peut tres bien que ta page est finit de se chargé alors que les rdfs non, une seule solution utilisé un observer sur le datasource et faire tes actions sur le endlosd de celui ci. Va voir ici : http://xulfr.org/wiki/SourceDeDonneesRdf

# Re: Initialisation des écrans

Envoyé par : Eric

Date : 10/12/2005 02:15

Merci pour cette réponse, mais il ne s'agit pas d'un problème de chargement de datasource. Je ne parle uniquement du chargement des composants (widjets, XBL) d'un écran.

Par exemple, sur les tree (Content Tree - voir http://xulplanet.com/references/elemref/ref_tree.html), le code suivant

var tree = document.getElementById("aTreeId");
tree.treeBoxObject.getColumnIndex("aColumnId");

retourne -1 s'il est exécuté dans la fonction onLoadIntl alors qu'il retourne le bon indice ( > 0 ) s'il est exécuté dans la fonction dfrIntl, soit après un timeout de n milli secondes après que l'event onload ait été déclenché sur l'écran, les colonnes de l'arbre étant définies dans le fichier XUL.

<tree>
  <treecols>
    <treecol id="aColumnId"/>
    ...
  </treecols>                                     
  <treechildren id="_rootObjcNode">
    <!-- treeitems are created by script -->
  </treechildren>                                             
</tree>

Dans le cas pris en exemple, les javascripts à charger à l'ouverture de l'écran sont nombreux et certains relativement volumineux.

Le problème n'apparaît pas lorsque les javascripts sont peu nombreux.

Si quelqu'un peut me faire part de son expérience ...

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.