2013-10-27 3 views
0

도움이 필요합니다. 끝내줍니다. durandaljs로 앱을 개발했으며 브라우저에서 테스트를 해왔습니다. 지금까지는 꿈처럼 작동합니다! 그렇다면 안드로이드 장치에 응용 프로그램을 배포하려고하면 모든 지옥 느슨하게!Durandaljs/Phonegap 앱을 android에 배포

노드를 사용하여 Weyland로 빌드를 최적화하려면 herehere 지시를 따랐습니다. 내 app 폴더 안에 main-built.js 파일이 있고 app 폴더와 lib 폴더에 모든 것을 포함하는 빌드 폴더가 있습니다 (eek !!!). 그래서 첫 번째 질문, 내 phonegap 안드로이드 www 폴더에 무엇을 복사합니까; 빌드의 내용 또는 초기 어플리케이션의 내용?

가이드에는 빌드에 아몬드의 사용자 정의 버전이 포함되어 있으므로 앱에서 requirejs를로드 할 필요가 없습니다 (예!). requirejs 스크립트 태그를 기본 빌드로 변경하면됩니다. 하나는 ./build/app/, 하나는 ./app에 있음).

그래서 지금 내 index.html을 단지 두 개의 스크립트 참조가, 내 초기 응용 프로그램의 하나를 사용

<script type="text/javascript" src="phonegap.js"></script> 
<script src="./app/main-built.js"></script> 

돌아 가기 추적 비트, 내 main.js에서; 나는 deviceready가 방아쇠를 당기고 dom이로드 될 때까지 앱이 시작되지 않았는지 확인하는 방법을 계속 생각했습니다. 나는이 youtube video을보고 나는 그렇게 다시이

requirejs.config({ 
paths: { 
    'text': '../lib/require/text', 
    'async': '../lib/require/async', 
    'domReady': '../lib/require/domReady', 
    'durandal': '../lib/durandal/js', 
    'plugins': '../lib/durandal/js/plugins', 
    'transitions': '../lib/durandal/js/transitions', 
    'knockout': '../lib/knockout/knockout-2.3.0', 
    'bootstrap': '../lib/bootstrap/js/bootstrap', 
    'jquery': '../lib/jquery/jquery-1.9.1', 
    'jpanelmenu': '../lib/jpanelMenu/jquery.jpanelmenu.min' 
}, 
shim: { 
    'bootstrap': { 
     deps: ['jquery'], 
     exports: 'jQuery' 
    }   
} 
}); 


define(['domReady', 'durandal/system', 'durandal/app', 'durandal/viewLocator', 'scripts/dealtag'], function (domReady, system, app, viewLocator, dealtag) { 

domReady(function() { 
    var useragent = navigator.userAgent.toLowerCase(); 

    if (useragent.match(/android/) || useragent.match(/iphone/) || useragent.match(/ipad/) || useragent.match('ios')) { 
     document.addEventListener('deviceready', onDeviceReady, false); 
    } 
    else { 
     onDeviceReady('desktop'); 
    } 
}); 

function onDeviceReady(desktop) { 
    if (desktop !== 'desktop') 
     cordova.exec(null, null, 'SplashScreen', 'hide', []); 

    app.title = 'My App'; 
    app.configurePlugins({ 
     router: true, 
     dialog: true, 
     widget: true 
    }); 

    app.start().then(function() { 
     //Replace 'viewmodels' in the moduleId with 'views' to locate the view. 
     //Look for partial views in a 'views' folder in the root. 
     viewLocator.useConvention(); 
     ....my own initialization code 

    }); 
} 
}); 

같은 부분에 이제 최적화 보이는 내 main.js 전에 사람의 코드에서 큐했다 최적화 후, 나는 빌드의 내용 + 내 CSS를 폴더를 복사하는 www 폴더에 대한 최적화에 포함되지 않았고, phonegap 로컬 빌드 안드로이드 실행; 나는 이것을 안드로이드 장치에 배포합니다. 앱의 첫 번째 페이지 (등록 페이지)가 ok를로드하고 logcat에서 브라우저 콘솔에서 볼 수있는 것과 동일한 내용을 볼 수 있습니다. 그러나, 나는 다른 페이지로 이동하는 링크를 클릭, 내가 보는 모든 내 장치에 흰색 화면이며 결코 logcat

사람이 내가 잘못 뭐하는 거지 어떤 생각을 가지고 있습니까 로그 캣 오류를 끝없는에 다음과 같은 사람들의 coz로드는 durandaljs를 사용하여 android를 위해 개발하는 것처럼 보입니다. 당신이 줄 수있는 도움에 미리 감사드립니다.

+0

비 빌드 응용 프로그램을 복사하려고 했습니까? 예 : 데스크톱 모드에서 원시 파일을 assets 폴더로 복사 했습니까? 일부 참조가 누락 된 것처럼 들립니다. addRow를 어디에서 호출하고 있습니까? 그 물건은 진부한가요? – zewa666

+0

Hello zewa, 나는 적어도 내가 아는 것이 아니라면 addrow를 부르지 않는다. 예 최적화되지 않은 파일과 requirejs 등을 사용하여 응용 프로그램을 배포하려고 시도했습니다. 일부 파일에서 throw되는 requirejs 스크립트 오류가 발생하고 문제의 원인을 잘 설명하지 못합니다. –

+0

그게 아니라면 유일한 차이점은 코르도바와 함께해야합니다. 다른 버전을 사용해 보셨습니까? – zewa666

답변

1

나는 "혼란"의 원인을 알아 냈습니다. durandaljs로 마이그레이션하기 전에 Sammyjs와의 라우팅을 수행했다면이 혼란을 겪을 수도 있습니다. sammyjs를 사용하면 뷰의 href 속성에 경로가있는 것이 링크처럼 작동하고 자동으로 해당 경로로 이동합니다. 이 만드는 durandaljs 미쳐 가고

<a data-bind="attr: {href: '#mypage/' + id}"></a> 

바인딩 코이

<a href="#mypage">My Page</a> 

또는 같은 것! 이

define(['plugins/router', 'knockout'], function (router, ko) { 
var myviewmodel= function() { 
    this.list= ko.observableArray(); 
} 
.... 
myviewmodel.prototype.showItem = function (item) { 
    router.navigate('mypage/' + item.id); 
} 

return myviewmodel; 
}); 

와 같은 모델은 다음보기에 당신은 내가이 사람에게 필요없는 슬픔을 절약 희망

<a data-bind="click: $parent.showDeals"> <!-- if within a list context --> 

또는

<a data-bind="click: showDeals"> 

을 가질 수 있습니다보기에 durandal에서 함수를 만들어 문제가 무엇인지 알아 내려고 몇 시간 씩 끝내야했습니다.

+0

Android에서 최적화 된 앱을 실행하는 것으로 동작이 제한되어 있습니까? 아니면 브라우저에서도 최적화 된 버전이 적용됩니까? – RainerAtSpirit

+0

안드로이드에있어 최적화 되었든 안되든 일어나는 것처럼 보입니다. 브라우저와 Ripple 에뮬레이터에서 완벽하게 작동합니다. –

+0

아마 https://github.com/BlueSpire/Durandal/issues?state=open에서 문제를 만들고이 스레드에 링크하는 것이 가장 좋습니다. – RainerAtSpirit

관련 문제