Ok, donc j'ai un contrôleur avec une méthode dans laquelle je veux charger une vue.
Toute aide est très appréciée.
Pour charger une vue, vous pouvez utiliser Ext.widget()
. Utilisez Ext.define()
pour créer une vue dans votre fichier de vue. Je vous recommande d'utiliser la propriété alias
pour définir un type xt en ligne pour la vue.
Lorsque vous devez charger la vue, créez une vue à l'aide de Ext.widget()
et spécifiez le type xtype (alias de votre vue). Voici un exemple:
// define a window
Ext.define('MyApp.view.user.Add',
extend: 'Ext.window.Window',
alias : 'widget.adduser',
.
. // Add other properties, custom properties, methods, event handlers etc..
});
Maintenant, quand vous voulez créer une instance dans votre contrôleur d’utilisateur, vous faites:
// create an instance
var view = Ext.widget('adduser'); // refer the below note!
Note: notez qu'il n'y a pas de 'widget'! il est automatiquement ajouté au nom du widget que vous transmettez.
Passons maintenant aux paramètres de passage. Comme la méthode Ext.create, vous devriez être capable de passer tous les paramètres en tant que:
// create an instance with params
var view = Ext.widget('adduser', {title: 'New User title'});
Concernant ref: les références vous aident à obtenir des références aux vues sur votre page. Ils ne permettent pas de créer une instance ou de charger une vue. Si votre vue est restituée, vous pouvez utiliser le système de référence pour mettre la main sur cette instance et manipuler la vue. Vous devez utiliser ComponentQuery pour obtenir la référence de votre vue.
refs can peut être utilisé pour créer de nouvelles instances et accéder aux instances existantes. En ajoutant l'option autoCreate: true
à votre référence, un appel au getter entraînera la création d'une nouvelle instance à l'aide de la définition de référence comme configuration si aucun composant existant ne correspond au sélecteur.
refs: [{
ref: 'list'
,selector: 'myusersgrid#users'
,autoCreate: true
// any additional options get passed as config when an instance needs to be created
,xtype: 'myusersgrid'
,itemId: 'users'
,store: 'Users'
,title: 'Users'
},{
ref: 'otherList'
,selector: 'myusersgrid#administrators'
,autoCreate: true
// any additional options get passed as config when an instance needs to be created
,xtype: 'myusersgrid'
,itemId: 'administrators'
,store: 'SpecialUsers'
,title: 'Special Users'
}],
Remarquez que l'utilisation de # correspond également à l'itemId afin que je puisse avoir des références à plusieurs instances du même type xt
Il existe également une option forceCreate: true
qui obligera le getter always de la référence à renvoyer une nouvelle instance, sans elle, autoCreate créera une instance la première fois qu’elle sera récupérée, puis continuera à la renvoyer.
Si je comprends votre question, je pense que vous souhaitez utiliser les références, consultez la documentation de Ext.app.Controller: http://dev.sencha.com/deploy/ext-4.0.0/docs/api/ Ext.app.Controller.html
En gros, vous créez une liste de références à l'aide de sélecteurs css:
refs: [
{
ref: 'list',
selector: 'grid'
}
],
Ensuite, plus tard dans la classe, vous pourrez accéder à cette référence à l’aide de get, c’est-à-dire:
refreshGrid: function() {
this.getList().store.load();
}
La méthode getList () est créée pour vous lorsque vous créez la référence à 'list'.
J'ai rencontré ce même problème. J'ai créé une méthode sur mon contrôleur de base abstrait pour récupérer l'instance de vue et créer dessus si elle n'existe pas.
Cela fonctionnera correctement même après que la vue ait été détruite - un nouveau sera créé.
Ext.define('My.controller.Base', {
extend: 'Ext.app.Controller',
//Retrieves an instance of the top-level view
//If it has not been created yet than one is instantiated
//Also, overrides the .close() method on the view to
//null out the instance reference on the controller (very necessary)
getViewInstance: function () {
var self = this;
if(!this.viewInstance) {
if(this.views && this.views.length) {
var view = this.getView(this.views[0]);
this.viewInstance = view.create();
this.viewInstance.close = function () {
view.prototype.close.apply(this, arguments);
self.viewInstance = null;
};
}
}
return this.viewInstance;
}
});
Désormais, tous mes contrôleurs peuvent facilement accéder à leur vue à partir du code de contrôleur sans variables externes.
Utilisez Ext.create ('Nom de fichier correct à ouvrir', param1 = me);
Dans la vue nouvellement créée, utilisez this.param1 pour accéder aux paramètres.
EG: Ext.create ('view.HelloOverlay, param1 = "Bonjour", param2 = "Monde"); dans le contrôleur de HelloOverlay, utiliser this.param1 donnera "Hello" et this.param2 donnera "World".
Parfois, les paramètres passés seront présents dans la vue, utilisez donc this.getView (). ParamName