2012-01-21 2 views
1

jquery 모바일을 사용하여 페이지를 바꿀 때 아약스를 사용하면 본문의 DOM 만 그래 픽합니다 (data-role="page"). 문제는 이것이 휴대 기기에서 실행되는 phonegap 앱이므로 ajax없이 전체 페이지로드를 수행하는 것이 JS, CSS 스크립트를 모두 가져 오는 속도가 매우 느립니다.jquery 모바일 아약스로드에 자바 스크립트를 잡을 수있는 방법이 있나요

저는 여러 가지 시도를 해왔습니다. 워드 프로세서에 DOM을 추가하고 data-role="page" 요소 아래에 넣을 수는 있지만이 방법으로는 실행할 수 없습니다.

는 내가 현재에 시도하고 첫 페이지의 상단에 포함 pagechange에가

function insertScript(script, container) { 
var elem = document.createElement('script'); 
elem.type = 'text/javascript'; 
elem.src = 'Assets/Scripts/' + script + '.js'; 
container.appendChild(elem); 
} 
$(document).bind('pagechange', function(event){ 

//get the path to the html asset 
var path = document.location.pathname; 

//split up 
var arr = path.split('/'); 

//get the relevant part of the path ie index.html 
var page = arr[arr.length-1]; 

// grab a list of all the divs's found in the page that have the attribute "role" with a value of "page" 
var pages = $('div[data-role="page"]'), 
// the current page is always the last div in the Array, so we store it in a variable 
currentPage = pages[pages.length-1]; 

//if the page is index add index.js to the last dom node 
if (page == 'index.html') { 
    insertScript('index', currentPage); 
} 

}); 

그런 다음 DOM에 해당 페이지에 고유 한 JS를 삽입하려고하는 부트 스트랩 스크립트가 있습니다 예를 들어 index.js는 다음과 같습니다.

$("#start_page").live('pageinit', function() { 
    alert('on start page');  
}); 

그러나 pageinit 기능은 실행되지 않습니다. 어떤 아이디어

** 편집 :

내가 예를 들어 index.html을하고 home.html을를 사용하여, 여러 HTML 페이지를

* index.html을

<html> 
<head> 
<script type="text/javascript" src="js/phonegap-1.3.0.js"></script> 
<script type="text/javascript" src="js/jquery.min.js"></script> 
<script type="text/javascript" src="js/jquery.mobile-1.0.min.js"></script> 
<script type="text/javascript"> 
$("#index_page").live('pageinit', function() { 

//do some page specific js functions for index.html 
}); 

</head> 
<body> 
<div data-role="page" id="index_page"> 
<a href='home.html'>go to home page</a> 
</div> 
</body> 
</html> 

** home.html을

<html> 
<head> 
<script type="text/javascript"> 
$("#home_page").live('pageinit', function() { 

    //this is the JS I want to pull 
}); 

</head> 
<body> 
<div data-role="page" id="home_page"> 
<h1>this is the home page</h1> 
</div> 
</body> 
</html> 

그래서 색인에서 집으로 연결되는 링크를 클릭하면 DOM이 업데이트되지만 JS n home.html 페이지는 AJAX를 통해 페이지에 삽입되지 않으므로 그렇게 할 방법을 찾으려고합니다.

한 페이지에 모든 js를 포함 할 수 있지만 페이지를 많이 가지고 있기 때문에 그것을 피하려고 정말 노력하고 있습니다. 지저분 해지기 쉽습니다.

답변

0

정확히 무엇을 성취하려고하는지 잘 모르겠지만 자바 스크립트로 페이지의 각 링크를 반복하고 onclick을 false로 설정하도록 설정할 수 있지만 href를 ajax 호출로 전달할 수 있습니다. PHP 페이지는 요청 된 페이지의 URL을 받고, XML을 구문 분석하고, 본문의 내용을 반환합니다. 그러면 첫 페이지의 본문을 바꿀 수 있습니다.

+0

내가 묻는 것보다 나은 레이아웃에 대한 질문에 정보를 추가했습니다. 기본적으로 아약스를 탐색 할 때 특정 자바 스크립트를 가져 오려고합니다. – Brian

1

jQuery Mobile이 AJAX를 통해 다른 페이지를로드 할 때 새로운 페이지의 <div data-role="page">을 기존 페이지의 <body>에 삽입한다는 것만 기억하십시오. 그 밖에 div은 존재하지 않을 수도 있습니다. 따라서 두 번째 페이지를 가져올 때 실제로 삽입 할 스크립트가 없습니다.

당신이 할 수있는 방법은 - 귀하의 페이지 div 안에 스크립트를 포함 시키거나 HEAD에 모든 자바 스크립트를로드하는 것입니다. 또한 jQuery를 모바일 실행하기 전에 당신이 그들을 결합해야하며, 초기 페이지로드시 호출 될이 핸들러

http://code.jquery.com/mobile/latest/demos/docs/api/events.html

"에 지혜의이 조금에주의를 기울여야한다. 이것은 mobileinit에서 할 수 있습니다 처리기, 전역 구성 페이지에서 설명한대로. "

아, 그리고 기억해야 할 한 가지 다른 점은 ...이미로드 된 페이지로 javascript를 복사하면 실제로 실행되지 않습니다.)

+0

JS가 pageInit 이벤트로 래핑 되더라도? – Brian

+0

http://stackoverflow.com/questions/1197575/can-scripts-be-inserted-with-innerhtml 여기 도움이 될 것 같습니다. 하지만 여전히 주요 문제는 jQuery Mobile이 페이지를로드하고 스크립트를 실행 한 다음 이벤트를 시작하는 순서와 관련이 있다고 생각합니다. http://jacob4u2.posterous.com/documentready-with-jquery-mobile은 나를 위해 매우 도움이되었습니다. –

+0

내가 생각하는 두 번째 링크는 대답이 있을지 모르지만 나는 아직 그곳에 있지 않습니다. JS 바이올린은 나를 위해 달리지 않는 것 같습니다. 해당 프레임 워크를 사용하면 페이지 별 JS 파일에 링크해야합니다 (예 : 어딘가에 넣어야합니까? ? 또는 navigation.js가 가서 함수를 가져 오나요? – Brian

0

아직 만났습니다. 마지막으로 iframe 태그를 사용하고 data-role="page" 페이지 div에 추가합니다. 다만이 같은

:

<iframe style="display:none" onload="javascript:js_fun()"></iframe>

다음 js_fun() 실행됩니다. 따라서 아약스에 의해 js 코드 또는 파일을로드 할 수 있습니다.

관련 문제