Sencha Touch Глобальные переменные - PullRequest
3 голосов
/ 04 сентября 2011

Я работаю над приложением Sencha Touch и отлично его изучаю, потому что люблю JavaScript.

Это мой app.js

var App = new Ext.Application({
    name: 'My First App',

    //BaseURL: 'http://mydomain.com/testing/first/services/',

    launch: function() {
        this.views.viewport = new this.views.Viewport();

        // this.BaseURL = "http://mydomain.com/testing/first/services/";
    }
});

Это один из моих Магазинов.

var newsStore = new Ext.data.Store({
    model: 'News',
    sorters: [{
        property: 'PostedOn',
        direction: 'DESC'
    }],
    proxy: {
        type: 'ajax',
        url: 'http://mydomain.com/testing/first/services/News.php',
        reader: {
            type: 'xml',
            root: 'News',
            record: 'New'   
        }
    },
    getGroupString: function(record) {
        if (record && record.data.PostedOn) {
            return record.get('PostedOn').toDateString();
        }
        else {
            return '';
        }
    },
    autoLoad: true
});

Теперь вопрос, могу ли я создать глобальную переменную для всего приложения?Он называется BaseURL , и я могу использовать его среди всех хранилищ данных, и когда мне нужно изменить его, я просто изменяю его, чтобы отразить это для всего приложения.

Мне нужно знать две вещи.*

  1. Как объявить глобальную переменную уровня приложения.
  2. Как получить доступ к этой переменной в представлениях и хранилищах.

Ответы [ 4 ]

20 голосов
/ 20 марта 2012

Я бы рекомендовал добавить ваши пользовательские глобальные переменные в пространство имен приложения, например:

Ext.application({
  name: 'MyApp',
  launch: function() { },
  apiToken: 'foo'
});

Таким образом, вы сможете получить доступ к этим пользовательским переменным после запуска приложения:

MyApp.app.apiToken

Работает и с функциями:

Ext.application({
  name: 'MyApp',
  launch: function() { },
  apiToken: 'foo',
  getApiToken: function() { return this.apiToken; }
});
2 голосов
/ 05 сентября 2011

Вы можете объявить глобальную переменную как обычно без Sencha:

var BaseURL = "http://mydomain.com/testing/first/services/";

И затем использовать ее:

proxy: {
        type: 'ajax',
        url: BaseUrl + 'News.php',
        reader: {
            type: 'xml',
            root: 'News',
            record: 'New'   
        }
    }

EDIT:

Если вы хотите объявить его членом вашего экземпляра приложения, выполните:

var App = new Ext.Application({
    name: 'My First App',
    launch: function() {
        this.views.viewport = new this.views.Viewport();
        this.BaseURL = "http://mydomain.com/testing/first/services/";
    }
});

, а затем:

proxy: {
        type: 'ajax',
        url: App.BaseUrl + 'News.php',
        reader: {
            type: 'xml',
            root: 'News',
            record: 'New'   
        }
    }
1 голос
/ 25 марта 2014

После некоторых обновлений сенчи мы можем сделать это:

var App = Ext.application({
   name: 'Myapp',
   serviceUrl: 'https://example',

   launch: function() {


   } 
});


Ext.Ajax.request({
    url: Myapp.app.servideUrl,
    withCredentials: true,
    useDefaultXhrHeader: true,
    method: 'post',
    scope: this,

    params: {
        cmd:        'connect',
        id:         login,
        password:   pass,
        version:    1
    },

    success: function (response) {

        var result = Ext.JSON.decode(response.responseText);            

        if (result.result.status === 'connected'){
            this.loginSucess(result);
        }else{                                         
            this.loginFail(result);
        }
    },

    failure: function (response) {                    
        this.loginFail();
    }
});
0 голосов
/ 27 февраля 2013

Этот ответ может помочь Вам.Особенно, если вы хотите передать параметры для хранения.

...