2011-02-24 3 views
1

Cela pourrait être une question simple pour les geeks, mais pas pour moi, au moins. Je développais un programme simple XUL à partir de zéro. J'ai utilisé la balise wizard pour simplifier l'interface graphique qui apparaît à l'utilisateur. Sur une page wizard j'ai inséré un progressmeter pour montrer la progression d'une fonction appelée myFunction() qui appartient au JavaScript qui est disponible dans le fichier XUL. Comment puis-je mettre à jour correctement le progressmeter en fonction de la progression réelle de la fonction?Comment utiliser progressmeter dans une application XUL?

Répondre

1

Avez-vous essayé de définir la progression du progressmètre en utilisant sa propriété "value"?

myProgressmeter.value = 50; 

Vous avez juste besoin d'incrémenter cette valeur en fonction de la progression de votre fonction. Notez que la valeur doit être réglée entre 0 et myProgressmeter.max

+0

La question était ** comment **? Je connais l'attribut de valeur, et comment lui attribuer une valeur. La chose est que, j'ai besoin de savoir quelle est la progression de la fonction pour définir une valeur appropriée à l'attribut ** value **. Le ** progressmeter ** sur le document XUL ne sera pas mis à jour correctement. C'est le problème. Merci pour la réponse. –

+0

Je ne comprends pas vraiment votre problème, vous pouvez définir cette valeur depuis votre fonction javascript à mesure qu'elle progresse. Si votre fonction s'exécute dans un module js (et non un script), vous n'aurez pas d'accès direct au document XUL et devrez utiliser des observateurs, sinon cela devrait fonctionner. Notez qu'il se peut que vous utilisiez la valeur de propriété et non l'attribut un pour définir la progression. Il est une erreur commune pour essayer de mettre à jour un élément par l'attribut et non la propriété ... – revers

+0

@revers, partie Mon JavaScript est 'fonction progressBarUpdate (x) \t {var \t = document.getElementById PGS ("clng_progress_bar") \t pgs.value = x; } fonction progressBar() \t { \t for (var i = 0; i <= 100; i ++) {\t \t \t progressBarUpdate (i); \t \t pour (var j = 0; j <1000000; j ++); \t} } ' et la partie XUL est ' ' Pourquoi ne pas ce travail comme prévu ? –

2

Oui, le cycle de travail de fil inverse fonctionne, mais selon le document (ici: https://developer.mozilla.org/en/nsIThread) processNextEvent peut attendre très longtemps s'il n'y a pas événements en attente! Err .. depuis xulrunner est seul thread, il semble y avoir peu, ce qui entraîne un énorme ralentissement. Waggling la souris aide cependant.

Une enquête plus approfondie use processNextEvent(false) fonctionne sans délai.

Questions connexes