0

私はPhonegap+SenchaプロジェクトをPhonegap1.2.0から2.1.0に、そしてSencha 2にアップグレードすることを任されており、変更間の反復がより高速なChrome+jettyでのジョブデバッグの鈍い作業を行っています。

移行の部分で少し苦労した後、プロジェクトがChromeで起動するようになりました(つまり、デバッガーで起動メソッドを実行でき、アプリケーションが読み込まれます)が、Androidで同じことを試してみるとUncaught ReferenceError:アプリが定義されていません。

androidで呼び出される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();

これはChromeで問題なく機能し、上記で貼り付けたコードからfireCreateLocalStore()を呼び出すと呼び出しが終了します。

これをEclipseでコンパイルし、debugオプションを指定してデプロイすると、logcatがデータベースオブジェクトの作成を実行しているのがわかり(直前)、launch()行に到達すると、タイトルからエラーが発生します:Uncaught ReferenceError:アプリが定義されていません

問題のあるグローバルを、htmlのMyAppやApp.js(およびデフォルトのビュー)が役に立たないように、競合の少ないものに変更しようとしました。そのため、今はこれに固執しています。

ちなみに、私の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();
}
});
4

1 に答える 1

0

「アプリ」が PhoneGap API である「navigator.app」と競合している可能性が高くなります。Sencha アプリケーションの名前を変更できる場合は、おそらくそれが最善の策です。

于 2012-10-26T13:39:36.113 に答える