2012-07-28 3 views
2

jQuery Mobile에서 페이지를 변경하는 방법이 있습니까? 여전히 $ (document) .ready 함수가 시작 되었습니까? 내 페이지가 항상 완전히로드되지 않기 때문에 $ .mobile.changePage를 호출 할 때 몇 가지 문제가 발생하는 것 같습니다.jQuery 모바일 ChangePage 대안

changePage 대신 사용할 수있는 대체 방법을 찾는 대신 페이지를 새로 고치는 방법이 있습니까? changePage에 의해 DOM에로드 ??

+0

가능한 복제본 [Jquery Mobile - $ .mobile.changepage 외부 .JS 파일을로드하지 않음] (http://stackoverflow.com/questions/7449402/jquery-mobile-mobile-changepage-not-loading-external-js) -files) – Jasper

+0

이것은 꽤 일반적인 질문/문제입니다. AJAX 네비게이션 모델로 이동하면 사용자 경험을 통해 동일한 DOM으로 작업하기 때문에 이벤트 바인딩을 다시 생각해야합니다. 나는 비슷한 질문에 대답했고이 대답이 당신을 도울 수 있다고 생각합니다. http://stackoverflow.com/questions/7449402/jquery-mobile-mobile-changepage-not-loading-external-js-files/7449731#7449731 – Jasper

답변

2

이 답변이 잘못하고 쓸모가 없었습니다, 한 페이지에 특정 이벤트를 실행하려면 ... 실제로 사람을 도움이 될 것입니다 하나 - 재스퍼

문서 : 특히 http://jquerymobile.com/demos/1.1.1/docs/api/methods.html

당신이 reloadPage 옵션을 찾고 있습니다 :

reloadPage (부울, 기본값 : false) 이미 페이지 컨테이너의 DOM에 있더라도 페이지를 다시로드하도록합니다. changePage()의 'to'인수가 URL 인 경우에만 사용됩니다.

그래서,이 같은 작동합니다 :

$.mobile.changePage('/some/url.html', { 
    reloadPage : true 
}); 

또한 특정 의사 페이지의 pageinit 이벤트에 바인딩 할 수있는 그 의사 페이지 용으로 코드를 실행하기 위해 :

$(document).delegate('#page-1', 'pageinit', function() { 
    //run code for #page-1 pseudo-page 
}).delegate('#page-2', 'pageinit', function() { 
    //run code for #page-2 pseudo-page 
}).delegate('#page-3', 'pageinit', function() { 
    //run code for #page-3 pseudo-page 
}); 

그럼 전체 사이트의 모든 코드를 단일 .js include에 넣고 각 문서의 data-role = "page"또는 data-role = "dialog"요소 외부 또는 외부에 포함하는 것이 좋습니다. . 이렇게하면 사용자가 사이트에 착륙했거나 탐색 한 것과 관계없이 사이트의 코드가 항상 표시됩니다.

+0

@ Jaspar 효과의 JSFiddel을 만들 수 있지만 개인적인 경험으로 document.ready는 $ .mobile.changePage() 이후에 해고되었다. – Apollo

+0

jQuery Mobile 웹 사이트 (버전 1.1.1) : http://apexeleven.com/stackoverflow/document-ready/에서 페이지 사이를 탐색 할 때 발생하는 이벤트를 보여주는 빠른 예제를 설정했습니다. 초기 페이지로드 후에'ready' 이벤트가 시작되지 않음을 알 수 있습니다. – Jasper

1

jQuery Mobile에서 ajax는 탐색 할 때 각 페이지의 내용을 DOM에로드하는 데 사용되며 DOM 준비 핸들러 (즉, $(document).ready()을 사용하여 경계가 지정된 모든 이벤트)는 첫 번째 페이지에 대해서만 실행됩니다. 그것은 당신이 특정 페이지에 퍼팅 시도 할 수 있습니다 표시 될 때, 그래서 여기에

$(document) 
    .unbind("pageshow.somenamespace") 
    .bind("pageshow.somenamespace", 
    function() { 
     // code here 
    } 
);