2012-09-20 2 views
1

jQuery 모바일을 사용하여 HTML5 오프라인 기능 (캐시 매니페스트 등)을 사용하는 응용 프로그램을 개발하고 있습니다.오프라인 웹 응용 프로그램에서 jQuery 모바일 문제가 발생했습니다.

기본 프로그램은 현장 기술자가 인터넷 연결이없는 태블릿에서 주문을보고 수정할 수있는 프로그램입니다. 주문을 저장하기 위해 로컬 브라우저 데이터베이스를 사용하고 있습니다.

주문을 볼 수있는 orders.html 페이지가 있지만 매개 변수를 전달하기 위해 프로그램이 오프라인이고 매니페스트의 모든 단일 주문을 나열 할 수 없어서 GET 매개 변수를 사용할 수 없습니다. .

그래서 해시 매개 변수 (예 : orders.html#o4572)를 사용해야합니다. 하지만 jQuery 모바일은이 구성표로 훌륭하게 작동하지 않습니다. 자체 스키마에 해시 매개 변수를 사용합니다. 내가 list.html에 있고 orders.html#o4572에 대한 링크가있는 경우 링크가 list.html#o4752으로 바뀌며 같은 페이지에 있습니다.

$.mobile.linkBindingEnabled = false;을 설정하여 jQuery 모바일의 링크 처리를 해제 할 수 있지만 모든 아약스 탐색을 막을 수 있습니다. 멋진 전환 효과를 잃어 버리고 팝업 대화 상자가 더 이상 작동하지 않으므로 수동으로 수행해야합니다. 그리고 다른 문제가있을 수 있습니다.

이 방법이 제대로 작동하는 유일한 방법입니까? jQuery 모바일을 사용하기 시작 했으므로 뭔가 놓친 것처럼 느껴집니다.

+0

확인이 밖으로 뭔가를 할 수 있어야 JQM 라우터를 사용. JQM 팀 추천. 나를 구 했어요. – JonWells

+0

나는 그것을 보았다. 그러나 그것은 orders.html과 list.html이 아닌 단일 파일 시스템을 필요로하지만, 하나의 app.html처럼 보인다. 이 응용 프로그램은 결국 아주 커질 것입니다. DOM이 모두 동일한 파일에 있으면 너무 커야합니다. 유지 보수 통증도 많습니다. – ScottR

+0

광산 스파. 하지만 주위에 처음으로 URL을 캐싱하지 않고도 매개 변수를 전달할 수 있습니다. 나는 라우터를 동적으로 구성하는 것이 고통 스러울 수도 있다고 생각한다. – JonWells

답변

0

나는 멀티로하기 때문에 그러나 그것은 다중 응용 프로그램에 대해 동일한 작업을해야하는 오프라인 모드가 단일 페이지 응용 프로그램과 함께 jquery-mobile-router 플러그인을 사용하여 비슷한 짓을 페이지 응용 프로그램의 기본 동작 (ajax-enabledtrue으로 설정)은 JQM이 두 번째 페이지를 가져 와서 현재 페이지의 DOM에 연결한다는 것입니다. https://github.com/azicchetti/jquerymobile-router :

var router; 

var orderHandlerRoute = function (eventType, matchObj, ui, page, evt) { 
    var params = router.getParams(matchObj[1]); 
    //use your params to pull data from localStorage 
}; 

router = new $.mobile.Router({ 
    'orders.html(?:[?/](.*))?' : {handler: "orderHandler", events: 'bs'} 
    , {orderHandler: orderHandlerRoute } 
    }); 
+0

시도해 보았습니다. 하지만 다른 페이지 (예 : login.html, orders.html)로 연결되는 링크를 클릭하면 javascript 오류가 발생합니다. 코드를 추적하면서도 orders.html # orders? o = 4572 링크를 login.html # orders? o = 4572로 변환하는 jQuery 모바일 문제와 유사합니다. 대화 상자도 제대로 작동하지 않습니다. – ScottR

+0

한 페이지에서 다른 페이지로 연결하는 방법을 정확히 이해하는지 모르겠지만 (orders.html? o = 4572'와 같아야합니다), 해시를 전혀 사용하지 않아야합니다. 다른 페이지의 특정 페이지에 액세스하려는 경우 JQM이 [허용하지 않는] 것을 알아야합니다 (http://jquerymobile.com/demos/1.1.1/docs/pages/page-links.html). 그. – Jack

+0

캐시 매니페스트는 모든 페이지를 미리 선언해야하기 때문에 해시 매개 변수를 사용해야합니다. 링크에 동적 GET 매개 변수가 있으면 불가능합니다. 여러 가지 방법으로 다른 페이지에 매개 변수로 연결을 시도했지만 작동시키지 못했습니다. – ScottR

0

jquery mobile을 사용할 때 실제로 페이지를 선택하는 것 이외에는 해시 매개 변수를 사용하지 않아야합니다.
진행 방법은 매개 변수를 file.html?parameter=value으로 전달하고 javascript를 통해 값을 검색하는 것입니다.
그런 다음이 값은 온라인 일 경우 ajax 호출로 데이터를 검색하거나 오프라인 일 경우 로컬 저장소에서 읽을 수있는 js 함수로 처리 할 수 ​​있습니다. 매개 변수와 연결된 데이터를 기반으로 동적으로 페이지를 생성하려면 changepage 이벤트를 바인딩하거나 페이지가 표시된 후에 페이지를 변경하려면 pageinit 이벤트를 바인딩하십시오 (예 : 채우기 ? - file.html#pagename_itemvalue 로 타겟 링크를 쓰기 - 위해 pagechange 이벤트를 바인딩 : 캐시 매니페스트의 사용이 usingthe 매개 변수 = 값 구문에서 당신을 수없는 경우

또는) 폼 요소에, 다음과 같은 방법을 사용할 수 있습니다 기본 동작을 무시하고 대상 값을 구문 분석하여 pagenameitemvalue을 검색하고 표시 할 콘텐츠를 생성/액세스합니다. 당신은에서 그 예를 볼 수 있습니다 this page

+0

질문에서 언급했듯이 오프라인 응용 프로그램이기 때문에 언급 한 페이지 매개 변수를 사용할 수 없습니다. 가능한 모든 페이지를 캐시 매니페스트에 넣어야합니다. – ScottR

+0

오프라인 상태가 되어도 매개 변수에 액세스 할 수 있습니다. 예를 들어 [this] (http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery)는 오프라인 모드에서 작동합니다. – Romain

+0

예, HTML 5 캐시 매니페스트는 오프라인으로 사용되는 모든 페이지가 있어야합니다. file.html? parameter = value는 file.html과 다른 페이지이지만 file.html 및 file.html # o4572는 매니페스트에 따라 * 동일한 * 페이지입니다. – ScottR