2011-09-04 6 views
3

Je travaille sur une application Sencha Touch et je l'apprends très bien parce que j'aime JavaScript.Sencha Touch Global Variables

Ceci est mon 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/"; 
    } 
}); 

C'est l'un de mon magasin. Maintenant, la question est, si je peux créer une variable globale à travers l'application entière? Il est nommé BaseURL et je peux l'utiliser parmi tous les magasins de données et quand il faut le changer, je change juste cela pour refléter l'ensemble de l'application.

J'ai besoin de savoir deux choses.

  1. Comment déclarer une variable de niveau d'application globale.
  2. Comment accéder à cette variable dans les vues et les magasins.

Répondre

20

Je recommande d'ajouter vos variables globales personnalisées à l'espace de noms d'applications, comme ceci:

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

De cette façon, vous serez en mesure d'accéder à ces variables personnalisées après le lancement de votre application:

MyApp.app.apiToken 

Cela fonctionne avec des fonctions, aussi:

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

Vous pouvez déclarer une variable globale normalement comme vous le feriez sans Sencha:

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

Et puis l'utiliser:

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

EDIT:

Si vous voulez le déclarer en tant que membre de votre instance d'application:

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/"; 
    } 
}); 

puis:

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

intérieur exemple d'application? Je voudrais faire à l'intérieur de l'instance App et pour y accéder via l'instance App. – Neutralizer

+0

Vérifiez ma version modifiée – Luis

+0

Voir aussi la documentation Ext.namespace() et Ext.Application. La propriété "name" ne doit contenir aucun espace et peut être utilisée comme identifiant global. – romaninsh

0

This réponse, peut vous aider.
Spécialement si, Vous voulez passer des paramètres à stocker.

1

Après quelques mises à jour sencha, nous pouvons le faire:

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(); 
    } 
});