2017-02-28 1 views
4

Il existe des classes mixin qui fusionnent les méthodes à la classe cible. Je veux savoir quand le processus de fusion commence?Substitution de Mixin dans ExtJs

J'ai remplacé une des méthodes de mixin, mais elle n'a pas été surchargée dans la classe cible. Donc je suppose que la fusion va avant le dépassement. Dans un premier temps, ext.js définit mixin, puis classe cible. Lorsque je remplace la méthode mixins, cela n'a pas d'impact sur la méthode des classes cibles. Alors, comment résoudre ce problème? Comment remplacer la méthode mixins correctement?

+0

En ce moment-là, il est trop tard, vous devrez passer outre avant la mixin est appliquée. Comme il se passe, 'DockingContainer' est seulement utilisé dans cette instance, de sorte que vous pouvez simplement remplacer le panneau lui-même. –

Répondre

1

J'ai surchargé avec la façon suivante:

Ext.define('Ext.overrides.container.DockingContainer', 
{  
    override: 'Ext.container.DockingContainer', 
    getDockedItems: function(selector, beforeBody) 
    { 
      .... 
    } 
}, function() { 
     Ext.Object.each(Ext.ClassManager.classes, function(name, cls) { 
      if (cls.prototype && cls.prototype.mixins && cls.prototype.mixins.hasOwnProperty("docking")) { 
       cls.prototype.getDockedItems = this.prototype.getDockedItems; 
      } 
     }, this); 
    } 
);