ExtJs auditeurs
Je veux obtenir un événement onload de travail sur ma config objet.
Les ouvrages suivants, sauf lorsque je créer un
config.listeners={..}
( je pense que c'est ce dont j'ai besoin? ) pour remplacer
this.onload({...});
Suis-je encore en utilisant le droit de config? ( En général, je n'ai aucune idée sur la gestion des événements )
Ext.define('data.SimpleStore', {
extend: 'Ext.data.Store'
,constructor: function (config) {
config.url=config.url||"afsud"; //If no call, we assume that url has been passed. Pass neither and be shot
config.id=config.url+'Store';//call should be unique, else its another set of headaches.
//console.log(config);
Ext.define(config.id+'M', { //for a painful reason, you cant have a store without a model
extend: 'Ext.data.Model',
fields: []//we figure these out anyways
});
config.root=config.root||'data';
config.type=config.type||'json';
config.proxy= config.proxy||{ //note if we override our proxy, then server.php might not work as black magic
type: 'ajax'
,url : config.url
,reader: {
type: config.type//seriously if you want to change this, go away
,root: config.root//we assume.
}
};
config.model=config.id+'M';//model should match store anyway. Generic models are out of scope atm
config.listeners={
//this.populateFields //Error'd
};
this.callParent([config]);
this.load({//This works, but its after the parent call, so not exactly what i want
callback: function(records,operation,success){
var obj=Ext.decode(operation.response.responseText);
this.add(obj[config.root]);
console.log(this.getRange());
console.log(config);
}
});
}
,populateFields:function(){
console.log('ran'); //never happens
}
});
var s= Ext.create('data.Store',{url:'test.php'});
s.load();
- Puisque c'est l'objet de beaucoup de coups, il y avait un joli article sur les auditeurs de l'un des sencha les gars. mitchellsimoens.com/2011/12/ext-js-4/...
- Le lien ci-dessus déménagé: mitchellsimoens.com/ext-define-and-listeners-as-a-property-bad
Vous devez vous connecter pour publier un commentaire.
Dans ExtJS les événements sont gérés à l'aide de deux façons:
Tout d'abord, Vous pouvez ajouter dans votre config
auditeurs
objet:Deuxièmement, vous pouvez utiliser
on
méthode:À ajouter à la Molécule de la première réponse, que j'utilise souvent dans mes applications de l'entreprise, car il est plus concis et plus facile à lire.
Il est souvent plus facile d'utiliser un Bus pour passer des messages autour de votre application.
Ensuite dans votre utilisation de l'application à la suite de l'incendie du bus:
Et où vous voulez écouter l'événement:
Quelques chose avant d'introduire ma façon de coder:
id
à Ext Objets, que c'est une mauvaise pratique. Nous avons seulement besoin deid
s dans de très rares cas, et à moins qu'il n'y a absolument aucun moyen d'accéder à un objet sans l'aide d'unid
(je ne peux pas penser à une raison).Model
est une bonne pratique, mais vous pouvez toujours définir unStore
sans modèle, et il va vous aider à en créer un automatiquement.Afin de nettoyer votre code un peu, je suis sorti avec ce morceau de code (démo de ce code):
La gestion des événements, ExtJS est très bien défini et structuré. Vous pouvez toujours visitez cette page pour en savoir plus sur la gestion des Événements.
Si vous ne savez pas comment code ExtJS, vous pouvez toujours regarder leur code source et d'apprendre auprès d'experts.
Note
La
this.load(..
vous l'avez mentionné dans votre code est en fait une méthode définie dansExt.data.Store
, qui demande à l'Store
pour exécuter laload
action, et en cas de succès, leStore
chargecallback
que vous avez spécifié. Je pense que ce n'est pas leload
cas que vous avez mentionné.Bonne chance et bravo!
fields
, magasin de définir le modèle en fonction de vos champs, sans personnalisé de validation et de rendu. (3) Donc vous n'aurez pas besoin d'avoir tous lesx = x || {}
dans votre code, et plus propre (4) C'est juste une pratique personnelle et largement utilisé dans ExtJS. Et si vous avez peur de ce que IE problème, toujours tiret, et à la fin de vos lignes de bien, ou de jslint de votre code.Assurez-vous de joindre des événements lorsque les composants ont été rendus.
Ma solution overides la
initEvents()
la fonction des composants