2012-10-26 2 views
0

Phonegap + Sencha 프로젝트를 Phonegap 1.2.0에서 2.1.0 및 Sencha로 업그레이드해야합니다. 2 그리고 수정 작업 간의 반복 작업이 더 빨라진 Chrome + 부두에서 작업 디버깅 작업을 수행했습니다.안드로이드 내에서 디버깅 할 때 "Uncaught ReferenceError : app is not defined"가 표시되지만 Chrome Debugger에서는 그렇지 않습니다.

마이그레이션 부분에 조금 어려움을 겪은 후 프로젝트가 Chrome에서 실행되는 시점 (예 : 디버거에서 실행 메소드를 실행할 수 있고 애플리케이션이로드 될 수 있음)을 얻었지만 같은 것을 시도 할 때 Android의 경우 잡히지 않은 ReferenceError : 앱이 정의되지 않았습니다.. 같은

안드로이드에서 호출 된 HTML 파일을 찾습니다, 내가 응용 프로그램는 전역 객체에 대한 빈약 한 선택임을 알 수

<html> 
<head> 
    <title>Testing ExtJS 4</title> 
     <link rel="stylesheet" href="libs/sencha/resources/css/android_v01.css" type="text/css"> 
     <link rel="stylesheet" href="libs/hx/resources/css/prosegur.css" type="text/css"> 

     <!-- libs --> 
     <script type="text/javascript" charset="utf-8" src="libs/phonegap/cordova-2.1.0.js"></script> 
     <script type="text/javascript" src="libs/sencha/sencha-touch-all-compat.js"></script> 
     <script type="text/javascript" src="libs/jquery/jquery-1.7.1.min.js"></script> 
     <script type="text/javascript" src="libs/jquery/xml2json.js"></script> 
     <script type="text/javascript" src="libs/aes/aes.js"></script> 
     <script type="text/javascript"> 
      currentPlatform="Android"; 
     </script> 
     <script type="text/javascript" src="app/App.js"></script> 

     <script type="text/javascript"> 

db_name="PMobileDB"; 
db_version="1.0"; 
DEBUG_MODE=false; 
LOG_FILE="sdcard/xlogx.txt"; 

function fireCreateLocalStore() { 
var prosegurConfig = window.localStorage.getItem('ProsegurConfig'); 
if (prosegurConfig == null) { 
    prosegurConfig = new Object(); 
    prosegurConfig.configuration = { 
     esClienteProsegur: false, 
     estaActivadoClienteProsegur: false, 
     nroContrato: '', 
     paisDeContrato: 'ARG', 
     paisDeResidencia: 'ARG', 
     nombre: '', 
     cel: '', 
     fechaNacimiento: '', 
     email: '', 
     estado: 'NO_CONFIGURADO', 
     wsMobileConfig: 'https://psm.am:1962/wsProseguardConfig.asmx/wsMobileConfig', 
     wsHashActivation: 'https://psm.am:1962/wsProseguardConfig.asmx/wsHashActivation', 
     wsAlertFire: 'https://psm.am:1962/wsProseguardAlerts.asmx/wsAlertFire', 
     guardianPin: '', 
     startGuardianAlertTime: '', 
     version: db_version 
    }; 
    prosegurConfig.alerts = [ 
     { 
      alertType: 'GENERAL', 
      description: '', 
      tryContactCRA: false 
     }, 
     { 
      alertType: 'MEDICAL', 
      description: '', 
      tryContactCRA: false 
     }, 
     { 
      alertType: 'CARASSISTANCE', 
      description: '', 
      tryContactCRA: false 
     } 
    ]; 
    prosegurConfig.contacts = new Array(); 
    window.localStorage.setItem('ProsegurConfig', Ext.JSON.encode(prosegurConfig)); 
    console.log('se carga los datos iniciales de Prosegur'); 
} 
console.log(prosegurConfig); 
console.log('arranco app.mainLaunch()'); 
app.app.launch(); 
console.log('salgo de app.mainLaunch'); 
} 
</script> 
<script type="text/javascript">document.addEventListener("deviceready", fireCreateLocalStore,false); 
</script> 
</head> 
<body></body> 
</html> 

첫째, 특정 일이 1.4.0과 1.5 사이의 변화라고 생각합니다. 0, launch() 메소드에 대한 원래 호출은 다음과 같습니다 :

app.launch();

나는 그 2.1.0에서 일을하고 내가 좋아하는 그것을 호출 할 수없는 것을 발견 :

app.app.launch를();

위의 코드를 붙여 넣은 fireCreateLocalStore()를 호출하면 Chrome에서 올바르게 작동합니다.

Eclipse에서 이것을 컴파일하고 디버그 옵션을 사용하여 배포하면 logcat이 (이전에) 데이터베이스 객체를 생성하고 launch() 행에 도달하면 오류가 발생합니다. 제목 : Uncaught ReferenceError : 앱이 정의되어 있지 않습니다.

불쾌감을주는 글로벌 콘텐츠를 html과 MyApp.js (기본보기 포함)의 MyApp와 같이 덜 상충되는 것으로 변경하려고 시도 했으므로 이제는 이런 종류의 붙임성. 그런데

, 내 App.js은 다음과 같습니다

// Main application entry point 
Ext.application({ 
name: 'app', 
phoneStartupScreen: '../resources/images/LOADING_01.png', 
tabletStartupScreen: '../resources/images/LOADING_01.png', 
glossOnIcon: true, 
    fullscreen: true, 
autoCreateViewport : true, 

// the controller will take care of creating the view   
//controllers: ['Configuration', 'ImmediateAlert', 'Guardian', 'Log'], 
controllers: ['Configuration', 'ImmediateAlert', 'Guardian'], 

// You could delete this, here only to illustrate 
    // the sequence of events   
initialize: function() { 
    console.log('app initialize'); 
    this.callParent(); 
}, 

launch: function() { 
    console.log(app); 
    this.launched = true; 
    Ext.create("app.view.Viewport"); 
    this.mainLaunch(); 
}, 
mainLaunch: function() { 
    //if (!device || !this.launched) {return;} 
    if (!this.launched) {return;} 
    console.log('MainLaunch : loading in ' + currentPlatform); 

    Ext.getCmp('navigationView').getNavigationBar().add({id: 'save', 
     text: 'Guardar', 
     ui: 'light', 
     align: 'right', 
    }) 

    if (app.store == undefined) 
     app.store = new Object(); 

    app.store.contacts = Ext.create('Ext.data.Store', { 
     model: "app.model.Contact" 
    }); 

    app.store.alerts = Ext.create('Ext.data.Store', { 
     model: 'app.model.Alert', 
    }); 

    app.service.ProsegurLocalStorageStore.populateStores(app.store.alerts); 

    app.service.ProsegurLocalStorageStore.populateContactStores(app.store.contacts); 

    var config = app.service.ProsegurLocalStorageStore.getConfiguration(); 
      console.log('ATENCION' + app.configuration.GeneralConfiguration.fireAlertService()); 
    if (config.data.wsBaseURL != null && config.data.wsBaseURL != '') { 
     app.configuration.GeneralConfiguration.prosegurServiceBaseURL = config.data.wsBaseURL; 
    } 
    if (config.data.wsBaseCriticalURL != null && config.data.wsBaseCriticalURL != '') { 
     app.configuration.GeneralConfiguration.prosegurServiceCriticalBaseURL = config.data.wsBaseCriticalURL; 
    } 

    if (currentPlatform == "MacOS"){ 
     navigator.geolocation.getCurrentPosition(); 
    } 


    Ext.MessageBox.YESNO=[{itemId:'no',text:'NO'},{itemId:'yes',text:'Si'}]; 
    Ext.MessageBox.OK = {itemId:'ok',text:'Aceptar'}; 
    Ext.MessageBox.OKCANCEL=[{itemId:'cancel',text:'Cancelar'},{itemId:'ok',text:'Aceptar'}]; 



    Ext.Date.dayNames = [ 
         'Domingo', 
         'Lunes', 
         'Martes', 
         'Miercoles', 
         'Jueves', 
         'Viernes', 
         'Sabado' 
        ]; 

        Ext.Date.monthNames = [ 
         'Enero', 
         'Febrero', 
         'Marzo', 
         'Abril', 
         'Mayo', 
         'Junio', 
         'Julio', 
         'Agosto', 
         'Septiembre', 
         'Octubre', 
         'Noviembre', 
         'Diciembre' 
        ]; 

        Ext.Date.monthNumbers = { 
         'Ene': 0, 
         'Feb': 1, 
         'Mar': 2, 
         'Abr': 3, 
         'May': 4, 
         'Jun': 5, 
         'Jul': 6, 
         'Ago': 7, 
         'Sep': 8, 
         'Oct': 9, 
         'Nov': 10, 
         'Dic': 11 
        }; 

        if (Ext.is.Android) { 
          Ext.EventManager.onWindowResize(function() { 
          Ext.Viewport.scrollToTop(); 
          Ext.Viewport.updateBodySize(); 
          Ext.Viewport.fireEvent('resize', Ext.Viewport, Ext.getBody().getSize()); 
          app.views.viewport.getActiveItem().fireEvent('resize'); 
          }); 
        }; 

        app.service.ProsegurServiceCallbackDaemon.run(); 
} 
}); 

답변

0

"응용 프로그램"은 폰갭 API입니다 "navigator.app"와 충돌 가능성이 이상입니다. Sencha 응용 프로그램의 이름을 바꿀 수 있다면 가장 좋은 방법 일 것입니다.

+0

글쎄, App.js의 App에서 MyApp로 변경하고 View 및 index-android.html에서 다른 참조가 누락되었다고 생각합니까? – Cthulhu

관련 문제