2 votos

ESRI JS API 3.3- setExtent, cuando se llama dos veces, el mismo código, comportamiento diferente, salta

Nuestro mapa tiene un botón 'home' en la barra de herramientas con un código que toma los valores de extensión de un archivo de configuración, crea un objeto Extent a partir de esos valores y pasa el objeto Extent a la función setExtent del mapa. También llamamos a este mismo código cuando el mapa se inicializa, llamando a la función click del botón. Así que si cargamos el mapa, y luego hacemos clic en el botón de inicio, la imagen del mapa se desplaza unos 30 o 40 píxeles hacia arriba. No tiene sentido, estamos llamando exactamente el mismo código dos veces seguidas, con la misma entrada.

Toolbar.prototype.OnFullExtentClick = function () {
    var viewModel = registry.get('viewmodel');          
    var initial = config.Map.InitialExtent;
    var extent = new esri.geometry.Extent(initial);
    viewModel.Map.setExtent(extent);
 };

Lo llamamos una vez mediante código en la función Init:

ViewModel.Toolbar.OnFullExtentClick();

Y lo ejecutamos de nuevo cuando se hace clic en el botón de inicio, a través de Knockout.js como a continuación

<div id="toolbar">
    <div id="zoomin" class="map-panel" data-bind="click: Toolbar.OnZoomInClick">+</div>
    <div id="fullextent" class="map-panel" data-bind="click: Toolbar.OnFullExtentClick">   </div>
    <div id="zoomout" class="map-panel" data-bind="click: Toolbar.OnZoomOutClick">-</div>
</div>

No parece importar los valores que establezcamos para la extensión, el "salto" es siempre la misma distancia y dirección (30 a 40 píxeles hacia arriba). Mi(s) pregunta(s): ¿Qué estamos haciendo mal? ¿Cómo podemos conseguir que deje de hacer esto?

-- EDITAR -- Este problema es específico de IE, no lo hace en Chrome. Además, todavía lo hace cuando el código setExtent se sustituye por centerAndZoom.

Toolbar.prototype.OnFullExtentClick = function () {
    var viewModel = registry.get('viewmodel');
    var center = new esri.geometry.Point(717714, 972786, new esri.SpatialReference({ wkid: 2223 }));
    viewModel.Map.centerAndZoom(center, 1);
 };

2voto

pvgoddijn Puntos 1951

Es una respuesta floja, pero hasta que encuentre una alternativa mejor, esto enmascarará el síntoma:

var centerPoint = new esri.geometry.Point(config.Map.CenterPoint);
// hack to detect IE9 and adjust centerpoint on initial load.
if (navigator.userAgent.indexOf("Trident 5.0") > -1) {
    centerPoint.y -= 12000;
}
ViewModel.Map.centerAndZoom(centerPoint, config.Map.Zoom.InitialLevel);

Sí, lo sé, la detección del agente de usuario es malvado pero en este caso aparece a trabajar. (Así que, por favor, no vote hacia abajo a menos que tenga una solución mejor...)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X