2009-07-19 7 views
2

Je suis déconcertant avec la construction d'une application pour le Palm Pre.Mojo SDK - régler un minuteur

J'ai une question simple: Comment puis-je configurer un minuteur pour que du code soit exécuté après un certain temps?

J'ai essayé d'utiliser l'ancien javascript habituel setTimeout, mais cela ne semble pas fonctionner.

Voici ce que j'ai essayé:

setTimeout(this.someFunction, 3000); 
setTimeout('this.someFunction()', 3000); 

Ni l'un semble fonctionner. Comment puis-je accomplir cela?

Répondre

3

Il s'avère que le framework javascript prototype est utilisé par Mojo.

j'ai pu résoudre ce problème en utilisant:

this.someFunction.delay(seconds, [functionArgs,]); 

Une chose qui m'a trébuché était que la méthode delay a changé la valeur de this, de sorte que la fonction retardée ne doit pas attendre à ce que this sera la comme si vous l'aviez simplement invoqué directement.

+0

Comment contourner le problème «this» que vous avez décrit. Et si j'avais un modèle appelé txtmodel avec une propriété appelée valeur. En dehors de la fonction de délai, j'appellerais simplement this.txtmodel.value = 'foo' –

+0

D'accord, c'était juste un moment "duh" pour moi. Je passe simplement une référence à ceci à ma fonction de retard et cela fonctionne. Merci pour le conseil! –

+0

@cody Une autre solution (peut-être meilleure) consiste à utiliser la méthode des prototypes "bind" pour s'assurer que "this" est toujours ce que vous attendez d'elle quand cette méthode est appelée. –

1

@TM: Merci d'avoir signalé la méthode bind() de Prototype. Je luttais avec le problème setTimeout() hier et j'ai fini par utiliser la méthode delay() de Prototype comme vous l'avez souligné, et j'ai vu ce matin dans le livre "Palm webOS" de Mitch Allen qu'il appelait setTimeout() sur le contrôleur. objet .window, comme ceci:
this.controller.window.setTimeout(this.someFunction.bind(this), someNumberOfMilliseconds);

Je ne pense pas que je l'aurais remarqué l'utilisation de this.controller.window si je ne cherchais exactement cette solution, et maintenant je remarque plusieurs endroits dans le livre où this.someFunction.bind (this) est utilisé, bien qu'il n'explique jamais ce que cela fait. Maintenant je sais!

Questions connexes