IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Accéder à la valeur d'une fonction à l'intérieur d'une autre fonction


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 45
    Points : 33
    Points
    33
    Par défaut Accéder à la valeur d'une fonction à l'intérieur d'une autre fonction
    Bonjour à tous,

    Avec ce titre peu explicite, je vais essaye de vous décrire mon problème.

    A partir de la librairie prototype, je créé une classe nommée "hypermap". Celle-ci contient quelques méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    var hypermap = Class.create({
      initialize: function() {
         ...
      },
     
    addData: function(point){
            var oPoint = null;  
     
            for(var i=0;i<point.length;i++){            
                if (point[i].nodeName=="LONLAT"){                
                    coords = point[i].innerHTML.split(";");       
                    oPoint = new OpenLayers.Geometry.Point(parseFloat(coords[0]),parseFloat(coords[1]));
     
                }else if (point[i].nodeName=="LOCALISATION"){                
                    //oPoint = new OpenLayers.Geometry.Point(587036,6245152);
                    place = point[i].innerHTML;
     
                    // ICI Recuperation valeur
                    yqlgeo.get(place,function(o){
                        lon = o.place.centroid.longitude;
                        lat = o.place.centroid.latitude;                                  
                    });     
                    oPoint = new OpenLayers.Geometry.Point(lon,lat);
                }    
            }
     
            var feat = new OpenLayers.Feature.Vector(oPoint, null); 
            return feat
        },
     
    });
    Avec la méthode yqlgeo.get() (yqlgeo) je souhaite récupérer la longitude et la latitude du nom de la ville passée en argument pour ensuite les utiliser dans ma méthode addData.
    Mais comme celle-ci est elle même une fonction du coup la portée des variables reste interne à la fonction. Et oPoint = new OpenLayers.Geometry.Point(lon,lat) me retourne une erreur

    Je ne sais pas si j'ai bien réussi à expliquer mon problème. N'hésitez pas à me demander plus de détails si cela vous semble mal exprimé.

    Merci

    Arnaud

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    declares lon et lat en dehors de tes fonctions
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Déjà essayé

    En les définissant de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    var lon="foo";
    var lat="foo";
     
    var hypermap = Class.create({
    addData: function(point){
            var oPoint = null;  
     
     
            for(var i=0;i<point.length;i++){            
                if (point[i].nodeName=="LONLAT"){                
                    coords = point[i].innerHTML.split(";");       
                    oPoint = new OpenLayers.Geometry.Point(parseFloat(coords[0]),parseFloat(coords[1]));
     
                }else if (point[i].nodeName=="LOCALISATION"){                
                    oPoint = new OpenLayers.Geometry.Point(587036,6245152);
                    place = point[i].innerHTML;
     
                    yqlgeo.get(place,function(o){
                        lon = o.place.centroid.longitude;
                        lat = o.place.centroid.latitude;                                   
                        console.log("first");
                        console.log(lon);
     
                    }); 
                    console.log("second");
                    console.log(lon);              
                }    
            }
     
            var feat = new OpenLayers.Feature.Vector(oPoint, null); 
            return feat
        }
     
    });
    Le console.log "First" me retourne : 7.278240
    Le console.log "Second" me retourne : foo

    Arnaud

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    parcequ'ils sont dans un namespace mypermap ?

    essaye d'y acceder par

    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    J'ai l'impression que je ne suis pas le seul à être dans la même situation :
    http://forums.thedigitalfix.co.uk/fo....php?p=9005758

    Pour info, même en les passant en global, cela ne fonctionne pas.

    Arnaud

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Finalement,

    Cela a été plus rapide d'écrire la fonction moi même que d'utiliser la librairie yqlgeo

    Voilà la réponse, au cas où cela pourrait intéresser des personnes.

    je reste néanmoins preneur de la solution de ce problème de namespace.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    var yqlQuery =  'select * from geo.places where woeid in ('+
                                    'select match.place.woeId from geo.placemaker where'+
                                    ' documentContent = "' + place + '" and '+
                                    'documentType="text/plain" and appid = "")';
     
                    var src =   'http://query.yahooapis.com/v1/public/yql?q='+
                                encodeURIComponent(yqlQuery) + '&format=json&'+
                                'env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys';
                    json = new OpenLayers.Format.JSON
                    function handler(request) {                    
                        responseText=request.responseText;
                        value = json.read(responseText);
                        console.log(value.query.results.place.centroid);        
                    }
     
                    var request = OpenLayers.Request.GET({
                        url: src,
                        callback: handler
                    });

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/10/2013, 11h11
  2. Réponses: 2
    Dernier message: 04/12/2011, 10h58
  3. Réponses: 15
    Dernier message: 16/09/2009, 16h19
  4. [Débutant] Choix de fonction à l'intérieur d'une boucle
    Par mdelvaux89 dans le forum MATLAB
    Réponses: 7
    Dernier message: 08/04/2009, 12h01
  5. Réponses: 6
    Dernier message: 07/08/2007, 21h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo