Extjs, Wie Sie initialisiert werden neue Elemente beim erweitern - ohne Rahmen
Ich versuche, um besser auf die Erweiterung der Klassen von Extjs, und meine Entwicklung haben, die dazu führen mich zu diesem problem:
Habe ich verlängert Ext.Panel und ich möchte, dass meine Erweiterung, um eine Symbolleiste mit einer Schaltfläche als Standard.
myPanel = Ext.extend(Ext.Panel, {
method: function () {
return 'response!';
},
bbar: new Ext.Toolbar({
items:
[
{
xtype: 'button',
text: 'Hit me!',
handler: function (button, event) {
alert(this.method());
},
scope: this
}
]
})
});
Was ich noch nicht gelernt, doch warum ist dies nicht erlaubt. this
verweist auf die Globale Reichweite und nicht meine extended panel - so .method()
ist undefined
innerhalb der handler-Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist der Festlegung der bbar über den Prototyp anstatt sich auf ein bestimmtes Objekt.
Überschreiben initComponent und verschieben Sie die bbar-definition drin.
Sehen http://www.sencha.com/learn/Manual:Component:Extending_Ext_Components für eine Vorlage, die Sie verwenden können, wenn die Ausweitung Komponenten
Haben Sie im Auge zu behalten, dass das anonyme Objekt, das das erste element des
items
array wird erstellt in dem gleichen Umfang, wie die in dieExt.extend(...
ausgeführt wird.Wenn Sie hatte dieses:
würden Sie erwarten, dass
o.a
,o.b
, undo.scope
hätte die gleichen Werte wiea
,b
, undthis
im aktuellen Bereich. Hier ist es ein wenig komplexer, da Sie beim erstellen eines Objekts während der Erstellung ein array während der Erstellung eines Objekts etc., aber die Argumentation ist die gleiche.Was Sie tun sollten stattdessen ist zu definieren
this.bbar
Konstruktor: