全局变量sencha touch 2.1

时间:2013-04-18 03:50:30

标签: global-variables sencha-touch-2.1

您好我需要定义一个全局变量,以便在我的应用程序的任何地方使用。 我在 app.js 中声明了一个全局变量 baseUrl 。请看下面 app.js

    //<debug>
Ext.Loader.setPath({
    'Ext': 'touch/src',//Location of the sencha touch source files
    'bluebutton': 'app',



});
//</debug>



Ext.application({
    name: 'bluebutton',//Application Path, all classes in you app. For eg blueButton.view.Main.case sensitive

    views: ['Main',

    'BlueButton.CouponMain',
    'BlueButton.CouponList',
    'BlueButton.CouponList2',
    'BlueButton.CouponList3',

    'BlueButton.TransactionMain',


    ],



   stores : [
   'BlueButton.GlobalVariable',


   ], 

    models : ['BlueButton.GlobalVariable',
    'BlueButton.MemberDetail',


     ],



    controllers: ['Main', 
    'BlueButton.MemberList', 


    ],



    requires: [
        'Ext.MessageBox',

    ],

    icon: {
        '57': 'resources/icons/Icon.png',
        '72': 'resources/icons/Icon~ipad.png',
        '114': 'resources/icons/Icon@2x.png',
        '144': 'resources/icons/Icon~ipad@2x.png'
    },

    isIconPrecomposed: true,

    startupImage: {
        '320x460': 'resources/startup/320x460.jpg',
        '640x920': 'resources/startup/640x920.png',
        '768x1004': 'resources/startup/768x1004.png',
        '748x1024': 'resources/startup/748x1024.png',
        '1536x2008': 'resources/startup/1536x2008.png',
        '1496x2048': 'resources/startup/1496x2048.png'
    },


    //--Global value--
    baseUrl: 'http://192.168.251.108:8080',
    //--Global value--



    launch: function() {

        // Destroy the #appLoadingIndicator element
        Ext.fly('appLoadingIndicator').destroy();


        // Initialize the main view

             var LoginLS = Ext.getStore('LoginLS');
             LoginLS.load();

             var record =  LoginLS.getAt(0);



            if(record != undefined){
                var sessionId = record.get('sessionId');
               if (sessionId !=undefined){
                        var mainView = Ext.getCmp("mainview");
                        if(!mainView){
                        mainView = Ext.create('bluebutton.view.Main');
                        }

                        Ext.Viewport.setActiveItem(mainView);  
               }
               else
               {
                        var loginView = Ext.getCmp("loginview");
                        if(!loginView){
                        loginView = Ext.create('bluebutton.view.Login');
                        }

                        Ext.Viewport.setActiveItem(loginView); 
                }
            }
            else{
                      var loginView = Ext.getCmp("loginview");
                        if(!loginView){
                        loginView = Ext.create('bluebutton.view.Login');
                        }

                        Ext.Viewport.setActiveItem(loginView); 



//                        //--Disable this line --
//                          var mainView = Ext.getCmp("mainview");
//                        if(!mainView){
//                        mainView = Ext.create('bluebutton.view.Main');
//                        }

//                        Ext.Viewport.setActiveItem(mainView);  
//                         //--Disable this line --





               }




//        Ext.create('bluebutton.view.TopMenuList');

    },

     init: function () {
        this.callParent(arguments);

    },


    onUpdated: function() {
        Ext.Msg.confirm(
            "Application Update",
            "This application has just successfully been updated to the latest version. Reload now?",
            function(buttonId) {
                if (buttonId === 'yes') {
                    window.location.reload();
                }
            }
        );
    }
});

model.js

Ext.define('bluebutton.model.BlueButton.CouponList', {
    extend: 'Ext.data.Model',
    config: {
        idProperty: 'couponId',
        fields: [
            {  name: 'couponId'  },
            {  name: 'couponName'  },
            {  name: 'description'  },
            {  name: 'amount'  },
            {  name: 'couponType'  },

            {  name: 'merchant_bbID'  },
            {  name: 'sessionId'  },
            {  name: 'deviceId'  },



        ],

        proxy: {
            type: 'rest',
            url: bluebutton.app.baseUrl +'/WebCommon/rest/BBWebService/getCouponList',


            actionMethods: {
                create: 'POST',
                read: 'GET',
                update: 'PUT',
                destroy: 'DELETE'
            },


                      noCache: false, // get rid of the '_dc' url parameter

                    extraParams: {
                    sessionId: "1",
                      merchant_bbID: "merchant1",

                },


//            timeout:1000,
//            listeners: {
//                exception: function(proxy, response, operation) {
//                     alert("Connection Problem");
//                       Ext.Viewport.setMasked(false); // hide the load screen
//                       
//                  }
//               },

            reader: {
                type: 'json',
                 rootProperty: 'couponList'

            },

            writer: {
                type: 'json',

            },
        }



    }

});

然后我在我的model.js中使用了basedUrl。 它可以在我使用浏览器查看时工作。但是,当我使用 sencha app build testing 来编译我的应用时,

我使用浏览器打开,它向我显示错误消息未捕获的TypeError:无法读取未定义的属性'baseUrl'。有什么想法吗?

2 个答案:

答案 0 :(得分:16)

当您进行生产构建时,sencha应用程序中的所有文件都将被缩小,因此全局变量可能会丢失上下文。

有几种方法可以在sencha应用程序中声明全局变量

- &GT;第一种方法

在util / Config.js

中声明全局变量

<强> UTIL / Config.js

Ext.define('APP.util.Config', { 
    singleton : true,
    alias : 'widget.appConfigUtil',
        config : {
        baseUrl : 'xx.xx.xx.xxx',
    },
    constructor: function(config) {
        this.initConfig(config);
        this.callParent([config]);
    }
})  

app.js

中的更改
requires : [ 'App.util.Config']

现在,您可以在您的应用程序中使用它,如下所示。

var baseUrl = App.util.Config.getBaseUrl();

第二种方法 - &gt;

在类定义

之前在.js文件中声明全局变量
var baseUrl;

Ext.define('classname,{Other things });

答案 1 :(得分:0)

一个简单的例子

在你的app.js中添加变量。要测试您的变量,请在Google Chrome控制台中输入app.app.VariableName。 Chrome会自动为您完成。

Ext.application({
    name: 'app',

    /** 
     * Custom Variables
     * Use app.app.baseUrl to access the value
     */
    baseUrl : 'http://example.com',
    variable01 : 'foo',
    variable02 : 'bar',

    ...

});