pregunta basica en js

146 views
Skip to first unread message

Maximiliano Burgos

unread,
May 29, 2013, 10:19:01 AM5/29/13
to gtug...@googlegroups.com
No se porque, ni si le estoy errando al concepto, pero quiero que en una funcion se guarde el valor de una variable global, pero fuera de la misma, el valor se pierde. Mi code:

var pais;
function initialize() {
    var loc = {};
    var geocoder = new google.maps.Geocoder();
    if(google.loader.ClientLocation) {
        loc.lat = google.loader.ClientLocation.latitude;
        loc.lng = google.loader.ClientLocation.longitude;

        var latlng = new google.maps.LatLng(loc.lat, loc.lng);
        geocoder.geocode({'latLng': latlng}, function(results, status) {
            if(status == google.maps.GeocoderStatus.OK) {
                pais = results[0]['address_components'][5]['short_name'];
                console.log(pais);
            };
        });
    }
}

google.load("maps", "3.x", {other_params: "sensor=false", callback:initialize});

console.log(pais);

Siendo pais la var global, cuando sale de la funcion ya no tiene valor :/

Mario Zorz

unread,
May 29, 2013, 10:21:59 AM5/29/13
to gtug...@googlegroups.com
Esto no es que se pierde, es que cuando ejecutas en console.log(pais) de abajo de todo, todavia no se ha terminado de ejecutar la funcion asincrona que le pasas como parametro a geocoder.geocode(), que es donde haces la nueva asignación a pais con pais = results[0]['address_components'][5]['short_name'];




--
Has recibido este mensaje porque estás suscrito al grupo "GTUG BsAs" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Maximiliano Burgos

unread,
May 29, 2013, 10:23:10 AM5/29/13
to gtug...@googlegroups.com
y como la vuelvo sincrona, o como me guardo ese valor?

Mario Zorz

unread,
May 29, 2013, 10:47:28 AM5/29/13
to gtug...@googlegroups.com
La respuesta rapida, sería hacer otra funcion que haga lo que vos quieras  y la llamas en secuencia después de que te aseguraste de tener el valor actualizado de la variable pais. Algo asi funcionaría:

var pais;
function initialize(callback) {
    var loc = {};
    var geocoder = new google.maps.Geocoder();
    if(google.loader.ClientLocation) {
        loc.lat = google.loader.ClientLocation.latitude;
        loc.lng = google.loader.ClientLocation.longitude;

        var latlng = new google.maps.LatLng(loc.lat, loc.lng);
        geocoder.geocode({'latLng': latlng}, function(results, status) {
            if(status == google.maps.GeocoderStatus.OK) {
                pais = results[0]['address_components'][5]['short_name'];
                console.log(pais);
                if (callback)
                    callback();
            };
        });
    }
}

function callback(){
    google.load("maps", "3.x", {other_params: "sensor=false", callback:initialize});
    console.log(pais);
}




De hecho es todo un tema por la naturaleza de javascript.

Aca podes encontrar algunas cosas que te saquen del paso


Pero te recomiendo que intentes leer sobre las cuestiones más básicas de funcionamiento de javascript, sincronismo y demás, en esencia es lo que te va a permitir entender el lenguaje y cómo usarlo para que haga lo que vos quieras que haga.

Aca encontré algo que quizas aclare el panorama:


Simplemente googlea y a probar :)
Slds

Maximiliano Burgos

unread,
May 29, 2013, 10:57:20 AM5/29/13
to gtug...@googlegroups.com
mmm mira, hice la prueba, y nisiquiera me devuelve undefined como al principio, ahora no devuelve nada...

Mario Zorz

unread,
May 29, 2013, 11:04:03 AM5/29/13
to gtug...@googlegroups.com
Cuando llamas a initialize() tenes que agregarle "initialize(callback)"

GDG Bahia

unread,
May 29, 2013, 11:08:52 AM5/29/13
to gtug...@googlegroups.com
Hey man porque no le pones un return a la funcion o una var con true o false, asi desde tu funcion hasta que no este true por ejemplo devuelve y tomas el valor de la variable
Este valor lo tomas con un bucle while(este en false) .......
Mientras mi var no este en true espero
 While(!mi_return)
{
 pais = func_retorn();
}

 //ahora aca si tengo mi var cargada.


Mario Zorz

unread,
May 29, 2013, 11:13:08 AM5/29/13
to gtug...@googlegroups.com
eso puede bloquearle la UI. No sabemos en realidad qué quiere hacer o en qué contexto lo quiere usar.

GDG Bahia

unread,
May 29, 2013, 11:24:04 AM5/29/13
to gtug...@googlegroups.com
Probaste de poner el codigo javascript de llamada al final de la pagina
web.?
initialize se llama desde el tag <body onload="initialize()">
es como el $(document).ready(function(){ }); de jquery

en vez de llamara initalize en onload probaste poner tu funcion de
llamada a Initialize(() ?

GDG Bahia

unread,
May 29, 2013, 11:28:41 AM5/29/13
to gtug...@googlegroups.com
Otra cosa la llamada a la funcion de Googleson en Ajax y no va a
deveolver la llamada hasta que no tenga el dato.
Por eso la funcion de llamada a la api de Google debe esperar por el
valor de retorno.
Las llamadas a las apis de mapas son casi siempre via ajax asi que la
funcion debe tener un async=true, fijate en la documentacion

GDG Bahia

unread,
May 29, 2013, 11:33:39 AM5/29/13
to gtug...@googlegroups.com

fijate este codigo como empieza y fijate la llamada al final del codigo en la api ya esta la llamada 
a initialize a travez de 
google.maps.event.addDomListener(window, 'load', initialize);

var geocoder;
var map;
function initialize() {
  geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(-34.397, 150.644);
  var mapOptions = {
    zoom: 8,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}

function codeAddress() {
  var address = document.getElementById('address').value;
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
          map: map,
          position: results[0].geometry.location
      });
    } else {
      alert('Geocode was not successful for the following reason: ' + status);
    }
  });
}

google.maps.event.addDomListener(window, 'load', initialize);

FIJATE AQUI LA LLAMADA AL PROCEDIMIENTO

https://developers.google.com/maps/documentation/javascript/examples/geocoding-simple?hl=es

Maximiliano Burgos

unread,
May 29, 2013, 11:34:47 AM5/29/13
to gtug...@googlegroups.com
lo que quiero hacer es lo de la otra vez, traerme el pais por geolocalizacion y guardarlo para despues usarlo en el resto de mi webapp


--
Has recibido este mensaje porque estás suscrito al grupo "GTUG BsAs" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+unsubscribe@googlegroups.com.

Maximiliano Burgos

unread,
May 29, 2013, 11:43:22 AM5/29/13
to gtug...@googlegroups.com
probe google.maps.event.addDomListener(window, 'load', initialize); y no me trae nada :/
re-explico:
tengo una variable de traduccion que se llena cuando hago el callback:

function callback(){ translates = translates[pais]; }

si la tiro por consola, veo que esta llena, bien...
pero en html ni la reconoce (estoy usando Angular.js)

Claudio Corlatti

unread,
May 29, 2013, 11:45:37 AM5/29/13
to gtug...@googlegroups.com
que onda che
ultimamente este grupo se volvio un chat!

perdon si resulta mala onda el comentario, saludos
Claudio


2013/5/29 Maximiliano Burgos <maxi...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+...@googlegroups.com.

GDG Bahia

unread,
May 29, 2013, 11:46:54 AM5/29/13
to gtug...@googlegroups.com
Aca tenes el codigo iso de los paises y tambien el de la argentina por
provincias

http://es.wikipedia.org/wiki/ISO_3166-1

GDG Bahia

unread,
May 29, 2013, 11:56:32 AM5/29/13
to gtug...@googlegroups.com
El 29/05/2013 12:45, Claudio Corlatti escribió:
que onda che
ultimamente este grupo se volvio un chat!

perdon si resulta mala onda el comentario, saludos
Claudio


2013/5/29 Maximiliano Burgos <maxi...@gmail.com>
probe google.maps.event.addDomListener(window, 'load', initialize); y no me trae nada :/
re-explico:
tengo una variable de traduccion que se llena cuando hago el callback:

function callback(){ translates = translates[pais]; }

si la tiro por consola, veo que esta llena, bien...
pero en html ni la reconoce (estoy usando Angular.js)

El 29 de mayo de 2013 12:34, Maximiliano Burgos <maxi...@gmail.com> escribió:
lo que quiero hacer es lo de la otra vez, traerme el pais por geolocalizacion y guardarlo para despues usarlo en el resto de mi webapp
El 29 de mayo de 2013 12:28, GDG Bahia <gtug...@maqus.com.ar> escribió:
Otra cosa la llamada a la funcion de Googleson en Ajax y no va a deveolver la llamada hasta que no tenga el dato.
Por eso la funcion de llamada a la api de Google debe esperar por el valor de retorno.
Las llamadas a las apis de mapas son casi siempre via ajax asi que la funcion debe tener un async=true, fijate en la documentacion

--
Has recibido este mensaje porque estás suscrito al grupo "GTUG BsAs" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.


--
Has recibido este mensaje porque estás suscrito al grupo "GTUG BsAs" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 
--
Has recibido este mensaje porque estás suscrito al grupo "GTUG BsAs" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 
Los miembros de este grupo son libres de responder si-no a las consultas y todos hemos pasado por situaciones de este tipo y ademas es una buena practica para resolver problemas reales.
Aun tenemos la posibilidad de poder eleguir..!
Se podria seguir por privado, pero la lista quedaria medio inactiva, esto le da un poco de swing..!

Maximiliano Burgos

unread,
May 29, 2013, 12:02:42 PM5/29/13
to gtug...@googlegroups.com
sigamos con el swing entonces :P
comento la situacion completa, porque de a partes es mas complicado...
mi webapp se compone de pages con variables que se traducen (la declaracion es por Angular.js)
yo inicialmente declaro en un js, un json lleno de esas traducciones.
Luego, llamo a google maps para que me traiga el pais:

var pais;
function initialize(callback) {
    var loc = {};
    var geocoder = new google.maps.Geocoder();
    if(google.loader.ClientLocation) {
        loc.lat = google.loader.ClientLocation.latitude;
        loc.lng = google.loader.ClientLocation.longitude;

        var latlng = new google.maps.LatLng(loc.lat, loc.lng);
        geocoder.geocode({'latLng': latlng}, function(results, status) {
            if(status == google.maps.GeocoderStatus.OK) {
                pais = results[0]['address_components'][5]['short_name'];
                if (callback)
                    callback();
            };
        });
    }
}

function callback(){
    translates = translates[pais];
    trans_header = trans_header[pais];
}

con su ahora funcion de callback para que no muera en el asincrono...

translates = translates[pais];

es porque mi json tiene indices por pais, entonces cuando le paso translates['AR'] toma todas las traducciones de Argentina.
si lo llamo desde la consola, veo que perfectamente llena los dos arrays de traducciones sin problemas.
el tema es que en el sitio no traduce nunca, es como si angular.js no terminara de recibir el json reducido a un solo pais por indice...

probe a meterlo en el onload, como me habian recomendado, y sigue sin querer traducir...

GDG Bahia

unread,
May 29, 2013, 12:06:53 PM5/29/13
to gtug...@googlegroups.com
Fijate en esto

https://developers.google.com/maps/documentation/geocoding/?hl=es

Por lo general, este servicio está diseñado para las direcciones estáticas (conocidas previamente) de codificación geográfica para la ubicación del contenido de la aplicación en un mapa. Sin embargo, este servicio no está diseñado para responder en tiempo real a la información introducida por el usuario, por ejemplo. Para obtener más información sobre la codificación geográfica dinámica (por ejemplo, en un elemento de interfaz de usuario), consulta la documentación del geocoder de cliente de la versión 2 del API de JavaScript, delgeocoder de cliente de la versión 3 del API de JavaScript o del geocoder de cliente del API de Google Maps para Flash.

La codificación geográfica es un proceso que consume mucho tiempo y muchos recursos. Siempre que sea posible, realiza una codificación geográfica previa de tus direcciones (mediante el API de codificación geográfica descrita en este documento o a través de cualquier otro servicio de codificación geográfica) y almacena tus resultados en una caché temporal que tú mismo hayas diseñado.

GDG Bahia

unread,
May 29, 2013, 12:20:10 PM5/29/13
to gtug...@googlegroups.com
mira lo que dice aqui

Solicitudes de codificación geográfica

El acceso al servicio de asignación de identificadores geográficos tiene lugar de forma asíncrona, dado que el API de Google Maps necesita realizar una llamada a un servidor externo. Por ese motivo, debes incluir un método de devolución de llamada para que se ejecute al completar la solicitud. Este método de devolución de llamada procesará los resultados. Ten en cuenta que el geocoder puede devolver más de un resultado.

Debes acceder al servicio de asignación de identificadores geográficos del API de Google Maps desde tu código a través del objeto google.maps.Geocoder. El métodoGeocoder.geocode() inicia la solicitud al servicio de asignación de identificadores geográficos y transmite un objeto literal GeocodeRequest que contiene los términos de entrada y un método de devolución de llamada que se ejecutará al recibir la respuesta.

Quiere decir que debes implementar una funcion asincronica para que detecte cuando estan los datos presentes, en el caso de angular debe ser porque la llamada a la api no esta dentro del cuerpo de las funciones de angular, es como jquery sino esta dentro de la funcion gral no tiene efecto.

lo de arriba significa Callback, una funcion llamada de nuevo a llamar, seria el significado.
En angular debes realizar una llamada de este tipo, para que initialize quede envuelta dentro de angula, porque sino estaria fuera y nunca la ejecutaria. Initialize seria un objeto dentro de angular por ejemplo y los objetos guardan un estado.



Maximiliano Burgos

unread,
May 29, 2013, 12:25:02 PM5/29/13
to gtug...@googlegroups.com
ok....osea que seria algo asi?

function initialize(callback) {
(...)
}

function callback(){
    translates = translates[pais];
    trans_header = trans_header[pais];

// metodo controlador angular.js
function controlador($scope){
    $.each(translates, function(j,itemj)
    {
        $scope[j] = itemj;
    });
}
}


GDG Bahia

unread,
May 29, 2013, 12:26:58 PM5/29/13
to gtug...@googlegroups.com
Vos lo que queres es la coordenada geografica?
Si es eso la funcion simple de mapas te la devuelve sin tantos problemas.
le pasas el ISO del pais y te devuelve la coordenada por defecto de ese
pais es mucho m�s simple.
Mira este codigo lo hice y anda muy bien. las coordenadas iniciales son
de mi ciudad y tienen resolucion de la calle y numero

<html>
<head>
<script type="text/javascript"
src="https://maps.google.com/maps/api/js?sensor=true">
</script>

<script type="text/javascript">
var geocoder;
var map;
var Lat = -38.71850725830933;
var Lng = -62.266151905059814;
var marker;

function Iniciar()
{
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(Lat, Lng);
var myOptions = {
zoom: 17,
center: latlng,
mapTypeId: google.maps.MapTypeId.HYBRID
}

map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
marker = new google.maps.Marker({
map: map,
position: latlng,
title:"Centro"
});
}

function Calles(){
var calle = document.getElementById("direccion").value;
var ciudad = document.getElementById("ciudad").value;
var pais = document.getElementById("pais").value;
var buscar = calle+ "," + ciudad + "," + pais;

geocoder.geocode( { 'address': buscar}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
map.setCenter(results[0].geometry.location);
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
title:buscar
});
} else {
alert("Geocode no ha encontrado direccion porque: " + status);
}
});

}
</script>

</head>
<body OnLoad="Iniciar();">
Calle....: <input type="text" id="direccion" value="Chiclana 10"
style="width:200px;"><br>
Ciudad: <input type="text" id="ciudad" value="Bah�a Blanca,Buenos Aires"
style="width:200px;"><br>
Pa�s.....: <input type="text" id="pais" value="Argentina"
style="width:200px;"><br>
<input type="button" value="Ir" OnClick="Calles();"><br><br>
<div id="map_canvas" style="width:600px;height:300px;"></div>
</body>
</html>

Maximiliano Burgos

unread,
May 29, 2013, 12:31:59 PM5/29/13
to gtug...@googlegroups.com
no, vuelvo...
las coordenadas ya la obtengo

        loc.lat = google.loader.ClientLocation.latitude;
        loc.lng = google.loader.ClientLocation.longitude;

y el pais tambien:

pais = results[0]['address_components'][5]['short_name'];

el problema viene con angular, que no quiere mostrar objetos del json translates desde que lo meti en el callback


El 29 de mayo de 2013 13:26, GDG Bahia <gtug...@maqus.com.ar> escribió:
Vos lo que queres es la coordenada geografica?
Si es eso la funcion simple de mapas te la devuelve sin tantos problemas.
le pasas el ISO del pais y te devuelve la coordenada por defecto de ese pais es mucho más simple.
Ciudad: <input type="text" id="ciudad" value="Bahía Blanca,Buenos Aires" style="width:200px;"><br>
País.....: <input type="text" id="pais" value="Argentina" style="width:200px;"><br>

<input type="button" value="Ir" OnClick="Calles();"><br><br>
<div id="map_canvas" style="width:600px;height:300px;"></div>
</body>
</html>
--
Has recibido este mensaje porque estás suscrito al grupo "GTUG BsAs" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+unsubscribe@googlegroups.com.

GDG Bahia

unread,
May 29, 2013, 12:37:09 PM5/29/13
to gtug...@googlegroups.com
Es un tema de Angular en eso no te puedo ayudar ya que no lo he usado,
yo uso javascript y jquery para todo y si tengo que hacer algo lo armo
yo mismo.
Por este tipo de problemas con el tratamiento de Ajax y Json, siempre
tenes que laburar el doble.
busca como incorpora procesos asincronos en Angular por ahi esta el
problema.
Google te devuelve los resultados eso es obio, el tema pasa por Angular
que no los lee o no los encuentra, pero el tema no es muy jodido ya que
viene todo via encabezado http o https.


Mario Zorz

unread,
May 29, 2013, 1:18:51 PM5/29/13
to gtug...@googlegroups.com
Nos mostrás dónde llamás a initialize()?
Porque para que esto funcione tenes que pasarle "callback" a "initialize()", asi: initialize(callback)

Mario Zorz

unread,
May 29, 2013, 1:19:32 PM5/29/13
to gtug...@googlegroups.com
opino lo mismo es mas facil usar IRC para mantener este tipo de consultas

Pablo Moyano

unread,
May 29, 2013, 1:21:13 PM5/29/13
to gtug...@googlegroups.com
No es mala la del IRC +1, quien se abre un thread con eso y lo resuelve?


2013/5/29 Mario Zorz <mari...@gmail.com>

GDG Bahia

unread,
May 29, 2013, 1:37:18 PM5/29/13
to gtug...@googlegroups.com
function callback(){
translates = translates[pais];
trans_header = trans_header[pais];
}

con su ahora funcion de callback para que no muera en el asincrono...

translates = translates[pais];
----------------------------------------------------------------------

Probaste el google translate..ja ja ja

Ya lo vas a resolver y cuando lo hagas esa experiencia hay que
capitalizarla y ver como se resolvio.
Esa informacion realmente es importante, por eso es importante resolver
problemas reales de los developers.
Ya que Google no nos va a bancar m�s y el gobierno, por ahi anda...entre
nosotros tenemos que formar un Book Developers Resolutions for Argentine
Con problemas resueltos, y eso se logra con problemas reales...
Bon apetit..!
Vamos Carajo --- Viva la patria.. ja ja ja
Que la locura creativa nos envuelva ante los amargos tragos que hemos
tenido en estos dias..ja ja ja
Nosotros somos la Patria, no los traidores que se llenan la boca con
promesas y nos cagan..!

Maximiliano Burgos

unread,
May 29, 2013, 1:52:02 PM5/29/13
to gtug...@googlegroups.com
Lo del IRC me gusta la idea :D
donde llamo el initialize?
Bueno probe de llamarlo por muchos lados, ningun funciono:
1. lo llame desde el onload del body escribiendolo a mano
2. lo llame desde el onload de la funcion de google maps
3. y tambien lo llame en el <head> con un include header.js arriba de todo

igual el problema no esta en la carga del pais, va mas bien por el lado de Angular.js que no me quiere tomar las {{variables}} del json que le paso


El 29 de mayo de 2013 14:37, GDG Bahia <gtug...@maqus.com.ar> escribió:
function callback(){
    translates = translates[pais];
    trans_header = trans_header[pais];
}

con su ahora funcion de callback para que no muera en el asincrono...

translates = translates[pais];
----------------------------------------------------------------------

Probaste el google translate..ja ja ja

Ya lo vas a resolver y cuando lo hagas esa experiencia hay que capitalizarla y ver como se resolvio.
Esa informacion realmente es importante, por eso es importante resolver problemas reales de los developers.
Ya que Google no nos va a bancar más y el gobierno, por ahi anda...entre nosotros tenemos que formar un Book Developers Resolutions for Argentine

Con problemas resueltos, y eso se logra con problemas reales...
Bon apetit..!
Vamos Carajo ---  Viva la patria.. ja ja ja
Que la locura creativa nos envuelva ante los amargos tragos que hemos tenido en estos dias..ja ja ja
Nosotros somos la Patria, no los traidores que se llenan la boca con promesas y nos cagan..!
--
Has recibido este mensaje porque estás suscrito al grupo "GTUG BsAs" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+unsubscribe@googlegroups.com.

Mario Zorz

unread,
May 29, 2013, 1:56:25 PM5/29/13
to gtug...@googlegroups.com
estas seguro que la funcion de callback se está llamando?

Hacé esto y fijate si se llama (tiene que aparecer "hola estoy aca"). No hay forma que se llame si cuando llamas a initialize no le pasas por parametro callback
f
unction callback(){
    console.log("hola estoy aca");

    translates = translates[pais];
    trans_header = trans_header[pais];
}
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a gtug-bsas+...@googlegroups.com.

Maximiliano Burgos

unread,
May 29, 2013, 1:59:08 PM5/29/13
to gtug...@googlegroups.com
si, si, se esta llamando, incluso se translates se llena con el indice pais

Mario Zorz

unread,
May 29, 2013, 2:01:57 PM5/29/13
to gtug...@googlegroups.com
ah perfecto
entonces si es un problema de Angular, estas seguro que le estas pasando un JSON o no será un string? Si es un string pasale un JSON.parse()

Juan Simon

unread,
May 29, 2013, 2:02:30 PM5/29/13
to gtug...@googlegroups.com
Maximiliano,
Estas pasando al

$scope.contenido_json
El scope es la parte mas complicada de angular y suele ser donde mas uno se choca contra la pared.

(Algo que te puede ayudar mucho con eso es Extención para chrome)

Juan S. Simon


2013/5/29 Maximiliano Burgos <maxi...@gmail.com>

Maximiliano Burgos

unread,
May 29, 2013, 2:04:12 PM5/29/13
to gtug...@googlegroups.com
en serio? yo hasta ahora lo pasaba todo por ahi, q loco xD
voy a mirar un poco esa extension

Marina Cuello

unread,
May 29, 2013, 2:26:15 PM5/29/13
to gtug...@googlegroups.com
De paso, hace poco descubrí este chiche: http://jsfiddle.net/
Se puede armar algo que demuestre el problema, y es más fácil para mostrar a terceros qué se quiere y qué falla.

Marina



2013/5/29 Maximiliano Burgos <maxi...@gmail.com>

Maximiliano Burgos

unread,
May 29, 2013, 2:32:15 PM5/29/13
to gtug...@googlegroups.com
aaa sisi lo conozco, tal vez pueda replicar el problema ahi


Maximiliano Burgos

unread,
May 29, 2013, 3:08:56 PM5/29/13
to gtug...@googlegroups.com
ufffffffffffffff dioooooossss ¬¬
estuve analizando y el error no es Angular.js, sigue siendo la funcion de gmaps...
explico:

la funcion de callback no trata a mi json como global, cuando hace:
translates = translates[pais];
guarda como corresponde un solo pais del indice, pero fuera del callback, vuelve a tener todos los paises....

bmig...@gmail.com

unread,
May 29, 2013, 3:24:19 PM5/29/13
to gtug...@googlegroups.com
translates = translates[pais];

No soy un experto en cuanto a calidad de programación, pero eso de volcar un array o variable dentro de otra del mismo nombre no es buena idea.

Si translates[pais] es un array, podrías usar
var translates_list = translates[pais];



On Wed, 29 May 2013 16:08:56 -0300
Maximiliano Burgos <maxi...@gmail.com> wrote:

> ufffffffffffffff dioooooossss ¬¬
> estuve analizando y el error no es Angular.js, sigue siendo la funcion de
> gmaps...
> explico:
>
> la funcion de callback no trata a mi json como global, cuando hace:
> translates = translates[pais];
> guarda como corresponde un solo pais del indice, pero fuera del callback,
> vuelve a tener todos los paises....
>
>
> El 29 de mayo de 2013 15:32, Maximiliano Burgos <maxi...@gmail.com>escribió:
>
> > aaa sisi lo conozco, tal vez pueda replicar el problema ahi
> >
> >
> > El 29 de mayo de 2013 15:26, Marina Cuello <marina...@gmail.com>escribió:
> >
> > De paso, hace poco descubrí este chiche: http://jsfiddle.net/
> >> Se puede armar algo que demuestre el problema, y es más fácil para
> >> mostrar a terceros qué se quiere y qué falla.
> >>
> >> Marina
> >>
> >>
> >>
> >>
> >> 2013/5/29 Maximiliano Burgos <maxi...@gmail.com>
> >>
> >>>
> >>>>> El 29 de mayo de 2013 14:56, Mario Zorz <mari...@gmail.com>escribió:
> >>>>>
> >>>>> estas seguro que la funcion de callback se está llamando?
> >>>>>>
> >>>>>> Hacé esto y fijate si se llama (tiene que aparecer "hola estoy aca").
> >>>>>> No hay forma que se llame si cuando llamas a *initialize* no le
> >>>>>> pasas por parametro *callback*

Maximiliano Burgos

unread,
May 29, 2013, 3:27:46 PM5/29/13
to gtug...@googlegroups.com
bueno ahi la cambie, pero nada, me tira indefinido cuando la quiero leer

bmig...@gmail.com

unread,
May 29, 2013, 3:33:10 PM5/29/13
to gtug...@googlegroups.com
Es más bien una práctica que se adecúa a tu caso.

Te recomendaría crear un proyecto en http://jsfiddle.net/ y compartirlo así podemos ver en funcionamiento todo completo.

On Wed, 29 May 2013 16:27:46 -0300

Maximiliano Burgos

unread,
May 29, 2013, 3:39:44 PM5/29/13
to gtug...@googlegroups.com

bmig...@gmail.com

unread,
May 29, 2013, 3:52:36 PM5/29/13
to gtug...@googlegroups.com
Acá hay un problema: translates es un objeto, no un array. Cuando lo querés acceder por translates[pais] no te va a devolver el array de AR de esa forma.

La idea de JSFIDDLE es poder ejecutar el código. Por favor, incluí las librerías de Google que estás usando para que podamos probarlo como corresponde.



On Wed, 29 May 2013 16:39:44 -0300

Maximiliano Burgos

unread,
May 29, 2013, 3:56:07 PM5/29/13
to gtug...@googlegroups.com
no hay mas librerias que la de google maps, y si, quise ejecutarlo pero ni se inmuta, ni una alert vacio ni nada...
las librerias estan incluidas en External Resources.
y si, translates es un objeto json, pero si lo accedo como translates['AR'] por ejemplo, entra sin problemas...

Maximiliano Burgos

unread,
May 29, 2013, 4:04:07 PM5/29/13
to gtug...@googlegroups.com
okok me equivoque, no le estoy pasando un json xD
es un objeto js :P

bmig...@gmail.com

unread,
May 29, 2013, 4:32:06 PM5/29/13
to gtug...@googlegroups.com
Traté de usar JSFIDDLE pero me tira error en el google.map.coder, así que te lo pasó acá.

En cuanto a lo del objeto/JSON, tenías razón, funciona.

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
</head>
<body>
<div id="text">
<p>Este es el mensaje: <span class="translate" data-locale="saludo">(mensaje de saludo)</span></p>
</div>
<script type="text/javascript">
var translates =
{
'AR':
{
'saludo':'hola mundo'
},
'US':
{
'saludo':'hello world'
}
}

var pais, translates_list;

function initialize(callback)
{
var loc = {};
var geocoder = new google.maps.Geocoder();

if(google.loader.ClientLocation)
{
loc.lat = google.loader.ClientLocation.latitude;
loc.lng = google.loader.ClientLocation.longitude;

var latlng = new google.maps.LatLng(loc.lat, loc.lng);

geocoder.geocode(
{
'latLng': latlng
},
function(results, status)
{
if(status == google.maps.GeocoderStatus.OK)
{
pais = results[0]['address_components'][5]['short_name'];
if (callback)
callback();
};
});
}
}

function callback()
{
translates_list = translates[pais];

$("#text").find("span.translate").each(function(i)
{
var translate_data = $(this).attr("data-locale");
$(this).text(translates_list[translate_data]);
});
}

initialize(callback);
</script>
</body>
</html>

On Wed, 29 May 2013 17:04:07 -0300
Reply all
Reply to author
Forward
0 new messages