2009-11-03 5 views
0

J'utilise un composant Tab Navigator dans lequel il y a trois composants canvas. Lorsque je clique sur l'un des canevas (ou onglet), un camembert est affiché.Flex: Actualiser un onglet particulier d'un TabNavigator?

En fait, ce qui se passe est que le clic
1. la toile envoie un HTTPService dont l'URL est définie dans un fichier php
2. Ce fichier php obtient réellement des informations à partir d'une base de données. Sur la base de ces informations d'un fichier xml est créé
3. Graphique Fusion utilise ce fichier xml pour afficher un graphique circulaire

Problème:
La base de données est mise à jour après un certain temps.

Est-il possible de mettre à jour le graphique à secteurs toutes les 3 minutes pour refléter les modifications dans la base de données? ou

Puis-je envoyer le HTTPService particulier encore et encore toutes les 3 minutes en arrière-plan? ou

Y at-il un bon moyen de mettre à jour les informations dans un canevas particulier (ou un onglet) de Tab Navigator?

Merci mille fois. :)

Mise à jour:
Essayer d'installer une minuterie maintenant dans ma demande mais je reçois la suite des erreurs contre 2ème et 3ème ligne:

erreur 2e ligne:
marqueurs multiples:
-1120 accès de la propriété non définie Countsec
-1120 Accès des mtimer de propriété non définie
3ème erreur de ligne: 01
Accèsde propriété non définie mtimer

Mais j'ai défini tout comme indiqué ci-dessous dans le code:

var mTimer:Timer=new Timer(1000*60*3); //3 minutes 
mTimer.addEventListener(TimerEvent.TIMER,Countsec); 
mTimer.start(); 
private function Countsec(e:TimerEvent):void 
{ 
charts.send(); //HTTPService's ID that needs to be sent 
} 

Répondre

1

Les lignes suivantes doivent être dans un appel de fonction et non seulement déclarée dans le script:

mTimer.addEventListener(TimerEvent.TIMER,Countsec); 
mTimer.start(); 

Vous devriez probablement les appeler en fonction de l'initialisation ou les événements creationComplete.

0

Il existe essentiellement deux types de mise à jour, vous pouvez faire: basé sur le temps ou en fonction des événements.

Si vous souhaitez utiliser le minuteur, configurez simplement un timer au démarrage de votre application pour exécuter la mise à jour régulièrement.

Si vous souhaitez effectuer un événement, vous devez configurer le gestionnaire d'événements d'interface utilisateur approprié pour mettre à jour le contenu.

Pour accéder au contenu de l'onglet Navigator onglet, vous utilisez

yourTabNavigator.getChildAt(index) 

où l'indice est l'indice de base 0 de l'onglet que vous souhaitez accéder. Vous pouvez ensuite ajouter, supprimer, modifier ses objets de contenu. Si vous effectuez un codage en dur de vos onglets, vous pouvez simplement attribuer un ID à chaque objet de contenu et y accéder directement par ID.

<mx:TabNavigator id="tn" width="100%" height="100%"> 
     <!-- Define each panel using a VBox container. --> 

     <mx:VBox label="Panel 1" id="box1"> 
      <mx:Label text="TabNavigator container panel 1"/> 
     </mx:VBox> 

     <mx:VBox label="Panel 2" id="box2"> 
      <mx:Label text="TabNavigator container panel 2"/> 
     </mx:VBox> 

     <mx:VBox label="Panel 3" id="box3"> 
      <mx:Label text="TabNavigator container panel 3"/> 
     </mx:VBox> 
    </mx:TabNavigator> 

Vous pouvez alors y accéder comme "box1", etc.

+0

Merci Jaanus d'avoir répondu. Je pense que Timer fera la magie pour moi. Mais je suis confronté à d'étranges erreurs en utilisant Timer. J'ai mis à jour ma question. Si vous trouvez un peu de temps, jetez un coup d'œil. :) – baltoro

+0

Le code semble correct. La seule chose à laquelle je peux penser, c'est que votre fonction Countsec contient des bugs, et que tout ça tombe en morceaux. Essayez d'abord de déboguer la fonction Countsec, commentez tout et tracez simplement quelque chose à partir de la fonction. Si cela fonctionne, vous pouvez remettre les choses plus complexes. Assurez-vous également que vous avez toutes les importations nécessaires. – Jaanus

0

Essayez de changer la fonction "Countsec" au public plutôt que privé.

De plus, vous pouvez ajouter un argument pour le nombre de répétitions, après la longueur du temporisateur (1000 * 60 * 3, 0). 0 est infini ou défini sur un nombre spécifique.

Une dernière chose que vous pouvez faire est d'appeler directement la constante au lieu de TimerEvent.TIMER. Utilisez "timer" à la place. "mTimer.addEventListener (" timer ", Countsec);"

Questions connexes