2013-08-18 5 views
5

SammyJs로 앱을 만들었습니다. 현재 브라우저에서 완벽하게 작동합니다. 그러나 PhoneGap을 사용하여 Android에 패키지하면 경로가 더 이상 작동하지 않습니다.Sammyjs 경로가 Phonegap과 작동하지 않습니다.

나는 this SO question을 발견했습니다. 그러나 주어진 해결책은 작동하지 않습니다.

(function($) { 

    var app = $.sammy('[role=main]', function() { 
     this.disable_push_state = true; 
     ... 
    }); 
} 

누구도 동일한 문제를 경험 한 적이 있습니까?

나는 또한 라우팅을 사용하지 않도록 설정하려면 다음 스크립트 JQuery와 모바일을 사용하고

편집 :

<script type="text/javascript"> 
     // DISABLE JQM ROUTER 
     $(document).bind("mobileinit", function() { 
     $.mobile.ajaxEnabled = false; 
     $.mobile.linkBindingEnabled = false; 
     $.mobile.hashListeningEnabled = false; 
     $.mobile.pushStateEnabled = false; 
     $.mobile.changePage.defaults.changeHash = false; 
     }); 
    </script> 

나는 (경로 포함) 내 응용 프로그램 새미의 자바 스크립트와 gist를 만들었습니다.

+0

경로를 정의하는 코드를 제공해 주시겠습니까? – RoryKoehein

+0

답변을 요점과 함께 업데이트했습니다. –

+0

휴대 전화에 업로드하기 전에 localhost에서 올바른 호스트 이름/ip로 URL을 변경하고 있습니까? 'url = 'http : // localhost : 3000/api.json? school ='+ localStorage.school' – RoryKoehein

답변

1

나는 문제가이 주변에 절을 생각 : 내가 알고있는 것처럼

this.around(function(callback) { 
    var context = this; 

    url = 'http://localhost:3000/api.json?school=' + localStorage.school 

    this.load(url) 
    .then(function(data) { 
     parsed = JSON.parse(data); 

     //if (parsed.meta != undefined) { 
     // alert(parsed.meta.message); 
     //} 
     context.products = parsed.products; 
     context.places = parsed.places; 
     context.school = parsed.school; 
     context.title = $('[data-role=header] h1'); 
    }) 
    .then(callback); // *** this won't get called if load() rejects promise 
}); 

는 주변의 절은이 호출 될 때 경로를로드하는 것입니다 콜백()를 호출합니다.

약속 체인에 문제가 있다고 생각합니다. load()가 거부 된 약속을 반환하면 (아마도 휴대 전화에 localhost : 3000이 없기 때문에) then() 함수 중 어느 것도로드되지 않습니다. 따라서 callback()이 호출되지 않고 앱이 중지됩니다. 나는 (a) 거기에 어떤 에러 핸들링을 추가하여, 무슨 일이 일어 났는지, 그리고 (b) load() 결과에 상관없이 콜백을 확실히 수행 할 것을 조언 할 것을 조언 할 것이다. 또한 - JSON.parse (data)는 데이터가 적절한 JSON 인코딩 문자열이 아닌 경우 오류를 발생시킵니다. try/catch도 필요합니다.

나는 이것을 시도 할 것이다 :

this.load(url) 
.then(function(data) { 
    try { 
    parsed = JSON.parse(data); 
    } catch(e) { 
    console.log('error decoding json!: '+errorMsg); 
    } 

    //if (parsed.meta != undefined) { 
    // alert(parsed.meta.message); 
    //} 
    context.products = parsed.products; 
    context.places = parsed.places; 
    context.school = parsed.school; 
    context.title = $('[data-role=header] h1'); 
},function(errorMsg){ 
    console.log('error loading json!: '+errorMsg); 
}) 
.fin(callback); // *** fin() is meant to execute on both success and error, like a "finally". 

당신의 약속을 구현, 지느러미() 지원은 동등한를 호출 무엇 조회하지 않습니다. 본질적으로 약식입니다 : .then(callback).otherwise(callback)

길어서 짧은 이야기 - 당신은 주위에 전달 된 콜백이 무엇이든지 상관없이 실행되는지, 아니면 앱이 경로를 계속로드하지 않는지 확인하고자합니다. 예기치 않은 동작이 보이는 것입니다. 되려고.

콘솔을 볼 수 없다는 점에 관해서는 당신의 환경이 어떻게 생겼는지 모르겠지만 Eclipse와 ADT를 통해 성공을 거두었습니다. 콘솔 로그와 오류는 잘 보입니다.

+0

내 문제가 해결되었습니다. 그러나 JQM은 PhoneGap에서 매우 느리고 프레임 워크와 맞서 싸워야한다는 점이 마음에 들지 않습니다. 나는 내 견해를 바꿀 수 있고 새미를 지켜야 할지도 모른다. –

+1

이것은 당신의 경우에는 해당되지 않을 수 있지만, 종종 그 "명백한"반응은 호버/탭 타임 아웃과 관련이있다. 도청에 응답하는 속도가 느린 경우, 천국에 있다면 [jqm docs on cordova] (http://view.jquerymobile.com/1.3.2/dist/demos/faq/how-configure-phonegap-cordova.html)를 확인하십시오. 벌써. $ .mobile.buttonMarkup.hoverDelay 함수를 조정 해보세요. 호버링/탭을 구분하기 위해 의도적으로 몇백 밀리 초 동안 기다리고 있습니다. 호버링 할 수있는 요소가 없다면 앱을 끄고 앱 응답 성을 높일 수 있습니다. –

+0

내 이전 시도보다 나은 답변 : http://stackoverflow.com/questions/11024464/speeding-up-page-transitions-in-jquery-mobile-1-1-for-iphone-apps-built-with-pho (귀하의 jqm 버전과 일치하는지 확인하십시오.) –