2016-12-09 2 views
0

Je suis assez nouveau pour utiliser Ext JS 4.0.7, et j'ai récemment découvert les options Config, donc j'ai configuré la classe de configuration suivante, qui initialise avec le suit:Plusieurs classes dans Ext JS pour mettre à jour et partager les mêmes paramètres de configuration

Ext.define('CurrentRowSelection', { 
extend: 'Ext.app.Controller', 

config: { 
currentAccountID: { 
    $value: 'Empty', 
    cached: true, 
    evented: true 
} 
}, 

initialize: function(config) { 
this.callParent(config); 
} 

}); 

Je suis en mesure de mettre à jour cette configuration tout à fait bien à partir d'une autre classe événement d'écoute, qui est un clic droit sur un enregistrement de ligne et saisir la valeur currentAccountID. Cependant, chaque fois que j'essaie d'accéder à la nouvelle configuration mise à jour d'une nouvelle classe après l'initialisation, elle revient à la valeur 'Vide'.

Ce qui suit est utilisé pour définir la configuration de la classe contenant l'auditeur:

var CurrentRowSelection = new CurrentRowSelection(); 
CurrentRowSelection.setCurrentAccountID(1); 

Cependant, quand je crée un nouveau constructeur dans une nouvelle classe, avec l'espoir d'accéder à cette configuration nouvelle mise à jour de elseware , mon console.log me dit qu'il revient continuellement aux valeurs par défaut, car il semble s'initialiser chaque fois qu'un nouveau constructeur est créé - ce qui est logique, mais je dois l'arrêter.

Comment puis-je faire ceci et m'assurer que cette valeur est enregistrée tout le temps, à chaque fois? Je vous remercie.

Répondre

1

Ne créez pas de nouveaux contrôleurs à chaque fois. Chaque contrôleur ne doit être instancié qu'une seule fois, car si vous instanciez plusieurs contrôleurs du même type, chaque liaison d'événement que vous préparez dans la méthode control est exécutée plusieurs fois (la méthode control est généralement la méthode la plus importante d'un controller, bien qu'il puisse y avoir . exceptions)

Ainsi, chaque contrôleur doit exister en tant que seule instance seule, et que singleton seraient accessibles à l'aide getController où et quand vous en avez besoin:

MyAppName.app.getController("ControllerName").setCurrentAccountID(1) 

cela dit, je recommanderais à regarder dans magasins pour le stockage de données, pas de contrôleurs. Les magasins offrent la possibilité de synchroniser les paramètres avec un serveur (créer, lire, mettre à jour, supprimer). Si vous voulez créer un magasin singleton, vous lui donneriez un storeId et utiliser Ext.getStore() pour accéder à la boutique.

Par exemple, les paramètres de configuration dans mon application sont dans le premier enregistrement du magasin avec StoreID AllSettings:

Ext.getStore("AllSettings").getAt(0).get("groupDiscoveryCacheHours") 
+0

Merci d'avoir pris le temps de répondre. Au lieu d'un magasin, j'ai décidé d'utiliser des cookies de navigateur et cela semble fonctionner très bien. Merci de m'avoir forcé à sortir des sentiers battus. – greenTree