2011-03-25 2 views
4

J'ai un dojo.datagrid dans une de mes pages. Datagrid et son magasin (en appelant une URL) sont créés par la méthode déclarative. pas par dynamique/programmatique.Comment vérifier que le chargement de dojo.datagrid est terminé?

J'ai besoin d'exécuter une méthode javascript qui affiche un div (qui nécessite peu de données de la grille de données) juste en dessous de ma grille de données. Je devrais afficher la div seulement après que mon chargement de DataGrid soit terminé, pas avant cela.

Je cherche un événement comme onload terminé pour datagrid. Y a-t-il un événement avec dojo.datagrid? Je ne le vois pas dans la liste de la documentation de dojo.Datagrid de l'événement.

Existe-t-il un moyen de vérifier que le chargement du DataGrid de dojo est terminé?

Est-il possible d'utiliser dojo.connect pour gérer cela?

S'il vous plaît laissez-moi savoir si nous avons une façon de le faire ...

Merci, Raj.

Répondre

5

La grille de données elle-même ne charge jamais réellement toutes les données disponibles, elle montre seulement une sous-sélection des données dans son magasin.

Vous aurez besoin de lier dans les événements de magasin afin d'attraper l'événement de chargement. Puisque le magasin peut charger des données à partir de beaucoup d'endroits, vous devrez passer une fonction onComplete à la méthode de récupération du magasin de la grille.

grid.store.fetch({onComplete : function (items) { // Do something }}); 

Vous pouvez également créer le magasin programatically, appelez avec votre écouteur chercher onComplete, et une fois que vous avez terminé la modification des éléments de l'auditeur onComplete du magasin, appelez myGrid.setStore (MyStore);

+0

Cela ne fonctionne pas pour moi dans 1.8. Est-ce que le fetch doit être fait après le démarrage de la grille? Je passe la requête lors de la création de la grille comme si "query: {toUserId: self._userId}", donc je n'ai pas besoin d'appeler fetch. J'utilise la solution d'aspect ci-dessous pour le moment. – unludo

+0

cela fonctionnera dans la grille améliorée .... J'utilise la version dojo 1.10 – shv22

0

Vous pouvez configurer une minuterie pour vérifier si les données sont chargées, exécutez toutes les secondes jusqu'à ce que la charge est terminée (setSelectedIndex retourne vrai):

private var load_check:uint; 

    /* start the interval timer when the app is initialized */ 
protected function init():void 
{ 
    load_check = setInterval(getTime, 500); // 1/2 second 
} 
private function getTime():void 
{ 
    if (!datagrid.setSelectedIndex (0)) 
     return; 
    clearInterval(load_check); // data loaded! 
} 
3

Le DataGrid a un événement _onFetchComplete que vous pourrait se connecter avec dojo.connect. Notez qu'il commence par _, donc il est supposé être un type d'événement privé/protégé et son comportement pourrait changer dans les versions plus récentes de Dojo. Je sais que cela fonctionne bien dans Dojo 1.6.

3

Comme Alex l'a déjà signalé, vous pouvez réagir à l'événement (malheureusement) privé _onFetchComplete. Avec dojo 1.7, ceci peut être réalisé avec dojo.aspect comme:

require(["dojo/aspect", "dojox/grid/DataGrid", ...], function(aspect, DataGrid, ...) 
    var myGrid = new DataGrid({ ... }); 
    aspect.after(myGrid, "_onFetchComplete", function() { 
     // Do something with myGrid...  
    }); 
}); 
Questions connexes