2014-11-03 15 views
5

Supponiamo che io voglio di override una funzione all'interno del codice nativo fornito dal Sencha nel file ext-all-debug.js.ExtJs5 - metodo nativo prioritario definito all'interno ext-all-debug.js

La funzione è definita all'interno del Ext.util.Renderable -class e ha il nome cacheRefEls.

Il prioritario dovrebbe prendere posto all'interno del index.html del progetto per rendere più facile da mantenere per le versioni future.


ho già provato le soluzioni di override proposte all'interno di questa discussione:

Steps to overriding Sencha ExtJS standard component functionality (Ext.tree.Panel & Ext.data.TreeStore as two examples)


mio index.html si presenta come segue:

<html> 
... 
<script type="text/javascript"> 
    Ext.define('Myapp.view.Renderable', { 
     override: 'Ext.util.Renderable', 
     cacheRefEls: function(el) { 
       console.log("in overider method"); 
      //my adapted version of it 
     } 
    }); 
</script> 
... 
</html> 

Purtroppo dopo l'accesso a t he localhost: 8080 su Firefox-33 è visibile dal Firebug-2-Console-log che utilizza ancora la versione nativa della funzione.

Cosa mi manca qui?

+1

cacheRefEls è un metodo privato e non può essere sovrascritto. Se hai creato il tuo override con successo dovresti vedere: 'Ext.util.Renderable: Metodo pubblico" cacheRefEls "in conflitto con il metodo del framework privato dichiarato da Ext.util.Renderable' –

risposta

5

In ExtJS 5, è necessario spostare questi metodi nella configurazione privates.

Avresti dovuto vedere l'errore:

Public method "cacheRefEls" conflicts with private framework method declared by Ext.util.Renderable

è ancora possibile eseguire l'override del metodo privato. Nel tuo caso, la soluzione sarebbe:

Ext.define('Myapp.view.Renderable', { 
    override: 'Ext.util.Renderable', 
    privates: { 
     cacheRefEls: function(el) { 
      console.log("in overider method"); 
     //my adapted version of it 
     } 
    } 
}); 
+1

@kiltek Devi accettare questa risposta. –

+0

non tutti i metodi sottoposti a override devono passare all'interno di privati, solo quelli che in origine appartengono a loro come cacheRefEls. Dovresti aggiungere statici se il metodo che stai cercando di sovrascrivere appartiene a questo. –