2017-06-20 3 views
-1

Quelqu'un sait comment copier les écouteurs d'un objet à un autre?Extjs 4.1 - Comment copier les écouteurs de l'objet A vers l'objet B

J'ai essayé

Object a,b (pre-created...) 
    b.events = a.events 
    b.hasListeners = a.hasListeners 

Mais il n'a pas travaillé comme je l'ai élargi objet b il na pas arrêter dans le point d'arrêt que j'avais dans la fonction que j'avais l'écoute pour développer, est-il « bonne façon » de faire il?

+0

Les deux objets sont-ils similaires? Par exemple, vous avez un objet grille par rapport à l'objet Panneau et si vous copiez l'événement itemclick de la grille dans le panneau, cela ne fonctionnera pas. – Tejas

+0

L'objet a, est un todeode, et b est aussi un treenode ... Donc oui, je pense que je fais ça bien: X – ioliano

+0

Que voulez-vous dire par TreeNode, de quelle classe s'agit-il? Quelque chose qui implémente NodeInterface? –

Répondre

2

Vous ne devez pas lier directement des sous-arborescences de hiérarchie d'objets générées par ExtJS dans d'autres objets; c'est mauvais style et peut entraîner toutes sortes de problèmes, comme des fuites de mémoire ou une destruction prématurée.

E.g. si un objet est détruit, mais que l'autre continue de vivre, qu'arrive-t-il à l'objet des événements partagés?

Il peut être détruit ou non par le destructeur, puis l'autre objet tente d'y accéder, ce qui entraîne un comportement indéfini.

Si vous avez besoin des mêmes écouteurs sur plusieurs objets, vous devez créer un prototype dont vous dérivez ces objets, ou une fonction qui ajoute exactement ces fonctions d'écouteur à tout objet que vous fournissez en tant que paramètre.

Pour votre exemple, parce que les noeuds peuvent être créés automatiquement par un lecteur, je voudrais utiliser la deuxième approche, en ajoutant la fonction sur le magasin qui contient les nœuds:

addListenersToTreeNode: function(node) { 
    node.on('collapse', this.onCollapse); 
    node.on('expand', this.onExpand); 
    node.on('example', this.onExample); 
} 

puis appeler la fonction à la fois nœuds:

nodeStore.addListenersToTreeNode(a); 
nodeStore.addListenersToTreeNode(b); 

et voila, les nœuds d'arbre ont maintenant les mêmes écouteurs.

+0

Excellente réponse! Vous avez bien répondu comme il se doit ... – ioliano

+0

Mais que se passerait-il si vous ajoutiez dinamiquement des auditeurs à A ... et vous ne savez pas ce que les auditeurs ont-ils? Comment pouvez-vous l'ajouter de nouveau à B? – ioliano

0

définir votre code en classe. Ext.define ('appname.myapp.formname.form', { xtype: 'anyname', auditeurs: { cliquez ........ keyup ..... } }); utilisez votre xtype où vous