Función de JavaScript que quiero llamar desde mi aplicación ASP.NET Core Blazor:
export function onClick(map) { var latLng = null; function onMapClick(e) { latLng = map.unproject(e.point).toString(); alert("You clicked the map at " + latLng); // Here is "You clicked the map at + actual value of latLng" } map.on('click', onMapClick); alert("You clicked the map at 123 " + latLng); // And then "You clicked the map at + null" instead of latLng variable return String(yourGlobalVariable); }Código C# donde estoy llamando a esa función:
string res = await mapModule.InvokeAsync<string>("onClick", mapInstance);Donde mapInstance y mapModule son IJSObjectReference
La pregunta es: ¿Por qué en la primera alerta obtengo un valor real que asigné a la variable latLng en la función onMapClick y luego obtengo un valor nulo fuera de la función aunque la variable es global?
Probé un código similar aquí: http://jsfiddle.net/mufjkv6r/1/ y funciona
La pregunta es: ¿Por qué en la primera alerta obtengo un valor real que asigné a la variable latLng en la función onMapClick y luego obtengo un valor nulo fuera de la función aunque la variable es global?
Lo primero que quiero decir es que Jsfiddle contiene un flujo de ejecución normal, que es ejecutar una línea tras otra.
var latLng = null; function onMapClick(e) { latLng = map.unproject(e.point).toString(); alert("You clicked the map at " + latLng); // Here is "You clicked the map at + actual value of latLng" } map.on('click', onMapClick); alert("You clicked the map at 123 " + latLng); // And then "You clicked the map at + null" instead of latLng variable return String(yourGlobalVariable);
pero el código anterior no llamará a la función onMapClick a menos que haga clic en el mapa. Entonces el latLng será null en ese momento.