2012-06-21 7 views
1

내 응용 프로그램에서 phonegap (1.8.1)과 jquerymobile (1.1.0)을 함께 사용하고 있습니다.Jquery-mobile을 사용하여 페이지가 보이지 않도록 페이지를 변경하는 방법은 무엇입니까?

이제 index.html 페이지를 열어 응용 프로그램을 엽니 다. 내 index.html에 많은 페이지가 포함되어 있습니다.

<div data-role="page" id="page1"> 
<div data-role="page" id="page2"> 
<div data-role="page" id="page3"> 
<div data-role="page" id="page4"> 

나는 가지고있는 플래그에 따라 페이지를 열어야합니다. 현재 페이지 1이 기본적으로 열립니다. 하지만 내 응용 프로그램이 열리고 난이

$("#page1").on("pagebeforeshow", function(e) { 
$.mobile.changePage("#page2"); 
}); 

같은 pagebeforeshowchangePage()을했지만 항상 나에게 PAGE1 처음을 표시 한 후이 페이지 2에 간다 내가 빨리 페이지 2를 열고 자하는 가정합니다. 직접 열고 싶은 페이지 2 어떻게해야하나요?

+0

질문으로는 충분하지 않고 코드가 뭡니까? 당신은 새롭지 않습니다. 이미 질문을하는 법을 이미 알고 있어야합니다. – Th0rndike

+0

때로는 많은 지식을 가진 사람들이 많은 설명을 요구하지 않는 것처럼 느껴질 때가 있습니다. 어쨌든 나는 내 말을 코드로두고 설명하려고 노력한다. –

+0

@ Th0rndike 충분히 명확한가요? –

답변

1

여기서는 잘못된 이벤트를 사용하고있는 것 같습니다. jqm-events에서 :

**pagebeforeshow** 
Triggered on the "toPage" we are transitioning to, before the actual transition 
animation is kicked off. Callbacks for this event will recieve a data object 
as their 2nd arg. 


**pagebeforeload** 

Triggered before any load request is made. Callbacks bound to this event can call 
preventDefault() on the event to indicate that they are handling the load request. 
Callbacks that do this *MUST* make sure they call resolve() or reject() on the 
deferred object reference contained in the data object passed to the callback. 

그래서, pagebeforeload 아마이 페이지를로드하기 전에 실행 이후 당신이 페이지를 전환하기 위해 사용해야하는 기본 이벤트입니다, 그래서 당신은 그것을 볼 수 없습니다.

pagebeforeshow의 주된 문제점은이 이벤트가 트리거되면 이미 페이지가로드되어 표시 될 준비가되었음을 의미합니다. 이 이벤트 내에서 changePage()를 호출하면 현재 표시중인 페이지 다음에 표시 할 새 페이지로 페이지를 전환하는 대기열에 넣을 수 있습니다. 어쩌면이 이벤트와 jqm 사이트에서 설명한 "preventDefault()"기술을 사용하면 필요한 동작을 얻을 수 있지만이 작업을 한 번도 해 본 적이 없으므로 더 이상 도움을 줄 수 없습니다. 행운을 빕니다.

EDIT : 의견에 언급 된 OP와 마찬가지로 문제는 jqm의 기본 전환이었습니다. 새 페이지가로드되면 자동 슬라이드 전환이 트리거되므로 첫 번째 페이지가 표시되고 changePage()에서 호출 된 페이지로 전환됩니다. 해결책은 다음과 같이 전환을 피하는 것입니다.

$.mobile.changePage('#page', {transition:'none'}); 

이렇게하면 대상 페이지가 갑자기 표시됩니다.

+0

안녕하세요 Thorndike +1 멋진 답변입니다. 당신이 개념적으로 pagebeforeshow와 pagebeforeload에 대해 옳다하더라도. 하지만 pagebeforeload를 사용하면 아무 일도 일어나지 않습니다. 심지어 하나의 console.log ("안녕")도 아닙니다. –

+0

pagebeforeshow + preventDefault + reject 기술을 사용해 보시지 않겠습니까? 나는 그것이 간단하고 당신이하려고하는 것을 성취 할 수 있다고 생각합니다. – Th0rndike

+0

거부하는 방법 .. 나는이 ("pagebeforeshow", function (e) {e.preventDefault(); \t \t \t $에 대해이 $ ("# page1")이 있습니다.mobile.changePage ("# page2"); }}); –

관련 문제