Ho alcuni mesi di esperienza nello sviluppo dell'applicazione Web Extjs. Ho riscontrato questo problema:Sovrascrittura delle classi Extjs e richiamo della chiamataParent
Quando eseguo l'override di una classe, ho modificato il metodo, seguito l'implementazione precedente e invocato callParent()
. La parte di sostituzione funziona ma lo callParent()
ha invocato la vecchia implementazione.
il mio codice di disattivazione
Ext.override(Ext.layout.component.Draw, {
finishedLayout: function (ownerContext) {
console.log("new layouter being overriden");
this.callParent(arguments);
}
});
Il metodo della classe ExtJS per essere sovrascritta:
finishedLayout: function (ownerContext) {
var props = ownerContext.props,
paddingInfo = ownerContext.getPaddingInfo();
console.log("old layouter being overriden");
this.owner.setSurfaceSize(props.contentWidth - paddingInfo.width, props.contentHeight - paddingInfo.height);
this.callParent(arguments);
}
Nella console, posso vedere che primi le nuove stampe Layouter il messaggio seguito dalla vecchia Layouter implementazione ... Inserisco un breakpoint e ripercorro lo stack di invocazione, lo callParent()
del nuovo layouter chiamato vecchio. Devo chiamare la classe genitore, ma non il metodo sottoposto a override.
Qualche idea su come risolvere questo problema?
Ci scusiamo per omettere la versione che ho usato, sto usando ExtJs 4.1.2. La risposta scelta è l'approccio corretto ma non ho potuto usarlo, invece ho usato la risposta fornita da @wantok. –
A proposito, bypassare uno dei tuoi supers è un grosso problema, usalo con saggezza e con parsimonia! –