2012-01-19 2 views
0

Open Street Map 레이어가있는 기본 OL 맵을 다중 페이지 jQuery Mobile HTML 인터페이스에 통합하는 데 문제가 있습니다 -지도를 찾을 수 있습니다 'div'를로드하고 거의 모든 것을 올바르게로드하지만지도 타일이로드되기 전에 컨트롤을 클릭해야합니다. 여기에 맵 코드는 다음과 같습니다PhoneGap/jQuery 모바일 앱에서 OpenLayers가 두 번 클릭되지 않으면로드되지 않습니다

var map, layer; 
function init(){ 
    map = new OpenLayers.Map('map'); 
    layer = new OpenLayers.Layer.OSM("Simple OSM Map"); 
    map.addLayer(layer); 
    map.setCenter(
     new OpenLayers.LonLat(-71.147, 42.472).transform(
      new OpenLayers.Projection("EPSG:4326"), 
      map.getProjectionObject() 
      ), 12 
     ); 
} 

이 기능은 폰갭 명령을 받아 들일 준비가 화재하는 'ondeviceready'이벤트를 사용하여 호출한다. 페이지가 DOM에로드 될 때 다시 그려야하는 내가지도/레이어를 얻을 수있는 몇 가지 방법이 있나요

<!-- page showing map of route being recorded. --> 
<div id="route" data-role="page"> 
    <div data-id="recRoute" data-role="header" data-position="fixed"> 
    </div> 
    <div data-role="content"> 
     <div id="map"></div> 
    </div> 
    <div data-id="recRouteFoot" data-role="footer" data-position="fixed"> 
    </div> 
</div> 

:이지도를 포함하는 페이지입니다? 차라리 사용자가지도를보기 위해지도 컨트롤을 클릭하지 않아도됩니다.

업데이트 : '경로'페이지의 'pageinit'핸들러 :

/** Executes when gps page loads. **/ 
$('#route').live('pageinit', function(event){ 
     $('.del').detach().trigger('create'); 
     /** Executes when addTag button clicked. **/ 
     $('#createTag').click(createTag); 
     /** Executes when getPic button clicked. **/ 
     $('#getPic').click(function() { 
       getPic(); 
     }); 
     /** Executes when pauseResume button clicked. **/ 
     $('.pauseResume').click(function() { 
       pauseCounter(); 
     }); 
     /** Executes when stop button clicked. **/ 
     $('.stop').click(function() { 
       stopCounter(); 
     }); 
     // remove stupid button. 
     $('#del').detach().trigger('create'); 
     // load map. 
     init(); 
     $('#map').trigger('create'); 
     $('#route').addClass('ui-page-active').trigger('create'); 
}); 
+0

에서 pageinit 이벤트를 살펴 보자. – liquidus219

+0

지도 요소를 모두 두 번 클릭하면지도가 나타납니다. – liquidus219

+0

'.focus()'함수를 사용하여 map 요소 포커스를 제공하려고 시도했지만 jQuery Mobile에 내장 된 새로 고침 함수가 작동하지 않습니다. – liquidus219

답변

0

당신은이 차원을 가지고 그렇게되면,«#route»페이지가 초기화 된 경우에만지도를 작성해야합니다.

나는 또한지도를 포함하는 페이지를로드 할 수있는 응용 프로그램의 첫 페이지가 아닌 언급해야 http://jquerymobile.com/demos/1.0/docs/api/events.html

+0

단추 처리기를 추가하고 UI 처리기를 만들기 위해 내 응용 프로그램에서 해당 이벤트를 사용 했으므로 끝에 init() 호출을 넣습니다. 이제지도 에서처럼 작동하지만 '경로'페이지가 첫 번째 페이지로 표시됩니다. 내가 전에 트리거 기능을 호출했기 때문에 그것이 가능할 거라고 생각 했어. 질문 내 이벤트 처리기에 대한 코드를 배치했습니다. – liquidus219

+0

트리거가 시작되기 전에 init 호출을 두 번 클릭해야합니다. 몇 가지 경고문을 실험 해본 결과 맵이 생성되거나 init이 호출 된 후 이벤트 처리기가 호출 된 후에 init에서 아무 것도 호출되지 않는 것으로 보입니다. – liquidus219

+0

'$ ('# map'). trigger ('create'); ('create'); '왜 그렇게해야합니까?'('create'); – tonio

관련 문제