Extjs4 MVC, comment obtenir le Modèle ou la Vue à partir d'un Contrôleur de classe?
Ext.define('DigitalPaper.controller.Documents', {
extend: 'Ext.app.Controller',
views: ['Documents'],
stores: ['Documents'],
models: ['Documents'],
init: function() {
console.log('[OK] Init Controller: Documents');
}
});
Quelle est la fonction pour obtenir le Modèle ou la Vue de ce contrôleur?
J'ai essayé
Ext.getModel('Documents');
this.getModel('Documents');
this.getModel();
this.getDocumentsModel();
Tout laisse penser?
OriginalL'auteur Pierluigi B Web Developer | 2012-06-06
Vous devez vous connecter pour publier un commentaire.
Solution Trouvée:
Dans le Contrôleur, il est possible d'utiliser la référence à la Vue:
De sorte que vous pouvez obtenir la Vue avec ce:
En utilisant le 'refs' la section de la ExtJS contrôleur de définition, vous pouvez créer des références rapides à couramment utilisées composants. Références automatiquement créer des "getter" les méthodes basées sur le texte fourni pour "ref". Dans cet exemple, la création de lecture est "getViewDocuments'. Cela peut être appelé tout au long de la manette, où " il " désigne le contrôleur de portée. Le "sélecteur" définition est utilisée dans le résultat de l'Ext.ComponentQuery.query() de l'appel. Voir la documentation pour ComponentQuery.query() et voir comment puissant le sélecteur de définition peut être!
OriginalL'auteur Pierluigi B Web Developer
Ext contrôleurs sont assez bizarre, qu'il n'y a qu'une seule instance d'un contrôleur donné, peu importe le nombre de vues liées instances que vous pourriez avoir. Dans la plupart des MVC ou MVP systèmes, il existe un contrôleur instance par instance de vue.
Si vous prévoyez d'utiliser de vues multiples instances, alors vous ne devriez pas garder les références à ces vues dans le contrôleur.
Vous voudrez peut-être regarder dans Habiles MVC extension pour ExtJs qui a un contrôleur instance par instance de vue (en plus de l'injection de dépendance):
http://deftjs.org/
De toute façon, contrôleur.getView() renvoie une référence à la CLASSE de la vue, et non pas une instance d'objet. Même avec getModel(). getStore() renvoie une instance de la banque.
Dans votre contrôleur, vous pouvez faire quelque chose comme ceci:
Je vous recommande également le nom de votre modèle au singulier. Ce n'est pas un des Documents. C'est un Document.
OriginalL'auteur Neil McGuigan
Cela devrait fonctionner:
});
Ces méthodes sont créés par une méthode dans le Poste de contrôleur qui crée les getters.
http://docs.sencha.com/ext-js/4-0/source/Controller.html#Ext-app-Controller
Ici est ce que cette méthode ressemble à ceci:
Bon point. J'ai mis à jour le fragment exemple avec des commentaires de cette note que les accesseurs sont de retour.
La fonction de visualisation() Modèle de fonction() de l'Objet de banque d' { événements={...}, data={...}, mérous={...}, altri elementi...} -> je reçois ce dans la console, il travaille pour le magasin, mais il n'est pas pour la Vue et le Modèle. J'ai "fonction()"
OriginalL'auteur John Rice
getModel() et getView() ne retourne pas le modèle /vue sur le contrôleur - ils retourner les instances de ceux-ci dans l'application (et si il n'en existe pas, ils seront instanciées).
Vous pouvez simplement utiliser pour obtenir le point de vue ou les noms de modèle:
Je ne suis pas sûr de l'endroit où vous utilisez votre gets ( c'est à dire, ce.getModel('Détails') ), mais ceux-ci devraient correctement retourner une instance du modèle (le constructeur est le seul endroit que vous pourriez avoir des questions se référant à ces).
Oui, je dois avoir mal compris la question. Et vous avez raison, getModel retourne la classe d'une instance; c'est pourquoi nous utilisons .create();
OriginalL'auteur Izhaki