2017-09-08 2 views
1

Ce qui suit est une version simplifiée de mon code.Appel d'une fonction javascript dans un bloc define à partir d'une autre fonction du bloc

define ([ 
"dojo/dom", 
"dojo/_base/array", 
"dojo/_base/declare", 
"dgrid/OnDemandGrid", 
"dgrid/Selection", 
"dgrid/Keyboard", 
"dijit/form/Button", 
"dojo/store/Memory", 
"dojo/dom-construct", 
"dojo/string", 
"esri/layers/FeatureLayer", 
"esri/tasks/query", 
"esri/tasks/QueryTask", 
"javascript/myUtilities", 
"javascript/myCSV", 
"javascript/myGrid" 
    ], function ( 
dom,arrayUtils,declare,Grid,Selection,Keyboard,Button,Memory,domConstruct,dojoString,FeatureLayer,Query,QueryTask, myUtilities, myCSV, myGrid) { 
return { 
     initializeParkGrid: function(gridid, gridDiv){ 
          //code is here 
          return app.parkGrid; 
          },  
     initializeTrailGrid: function(gridid, gridDiv){ 
           //code is here 
          return app.trailGrid; 
          }, 

     updateParkGrid: function(){  
           //code is here 

           app.parkGrid.on('.dgrid-row:click', function(event){ 
            initializeTrailGrid(); 
           }); 
          }); 
         }         
     }; 
    }); 

Je veux appeler la fonction initializeTrailGrid() chaque fois qu'une ligne est cliqué dans le app.parkGrid. Lorsque j'essaie de l'exécuter tel qu'il est écrit, je reçois une erreur en me disant que initializeTrailGrid n'est pas une fonction. Si j'appelle initializeTrailGrid() à partir d'un bloc define dans un fichier différent, cela fonctionne très bien. Le code ci-dessus se trouve dans le fichier myGrid, j'ai donc essayé de mettre javascript/myGrid dans la liste des définitions et d'utiliser myGrid.initializeTrailGrid() pour l'appeler mais cela ne fonctionnait pas non plus. Existe-t-il un moyen de le faire étant donné la structure du bloc define?

+0

Vous devez importer. – SLaks

+0

Mes compétences javascript sont limitées. Que voulez-vous dire en l'important? – ponder275

Répondre

2

il est préférable de créer une classe:

Myclass = function() { 
    this.initializeParkGrid = function (gridid, gridDiv) { 
     return app.parkGrid; 
    } 
} 

puis, sur événement click, méthode d'appel ... ne pas oublier d'initialiser la classe:

var myclass = new Myclass(); 

app.parkGrid.on('.dgrid-row:click', function(event){ 
    myclass.initializeParkGrid(a, b); 
});