2017-08-31 2 views
0

Kann jemand hier, wie man die Nachrichtenbox überschreiben, um Symbole für die Tasten zu setzen? dh: überprüfen Symbol für YES/OK, Kreuzknopf für NO usw.override messagebox und fügen Symbole zu den Standardschaltflächen

Ich habe versucht, die makeButton Funktion von Ext.window.MessageBox außer Kraft zu setzen, aber es scheint nicht zu funktionieren und traf nicht einmal die debugger:

Antwort

1

Wie @ scebotari66 haben erklärt, Ext.Msg und Ext.MessageBox sind Singletons von Ext.window.MessageBox. Wenn Sie also Ext.window.MessageBox.makeButton überschreiben, hat dies keine Auswirkungen, wenn Sie die Singletons für diese Klasse verwenden.

Es gibt jedoch eine Möglichkeit, Ihre Überschreibungen auf Ext.window.MessageBox für den Singleton anzuwenden. Rate mal wie.

(Trommelwirbel)

tantantanan!

Ext.MessageBox = Ext.Msg = new Ext.window.MessageBox();

Ja, das ist richtig. Sie müssen das Singleton nur nach dem Überschreiben neu zuweisen. So

:

Ext.override(Ext.window.MessageBox, { 
    makeButton: function (btnIdx) { 
     var btnId = this.buttonIds[btnIdx]; 
     return new Ext.button.Button({ 
      handler: this.btnCallback, 
      itemId: btnId, 
      scope: this, 
      text: this.buttonText[btnId], 
      iconCls: ['okbutton', 'yesbutton', 'closebutton', 'cancelbutton'][btnIdx], 
      minWidth: 75 //or you can also remove this to make the icons close to the label 
     }); 
    } 
}); 
//re-assign singleton to apply overrides 
Ext.MessageBox = Ext.Msg = new Ext.window.MessageBox(); 

das nächste Mal Ext.Msg.alert() rufen, Ihre Symbole zeigen nun auch.

Ich hoffe, Sie finden das hilfreich.

HINWEIS: Die iconCls config in der Reihenfolge sein sollte [ok, yes, no, cancel]

+0

Guter Punkt! Schande über mich für das nicht zu sehen – scebotari66

+0

könnte es nicht gesehen haben, wenn Sie nicht beantwortet haben. :) Sie besitzen 80% des Kredits: D –

1

Wie Sie aus dem Quellcode sehen können, wird die makeButton Methode von initComponent von Ext.window.MessageBox aufgerufen. Ich nehme an, dass Sie die Singleton-Instanz Ext.MessageBox (oder Ext.Msg) zum Anzeigen von Meldungsfeldern verwenden. Diese Instanz wird in der Callback-Funktion unmittelbar nach dem Erstellen der Ext.window.MessageBox erstellt (überprüfen Sie das dritte Argument von Ext.define). Dies bedeutet auch, dass es vor der Überschreibung passiert.

So können Sie direkt die Tasten der Singleton-Instanz außer Kraft setzen, wie so:

Ext.Msg.msgButtons.ok.setIconCls(okBtnCls); 
Ext.Msg.msgButtons.yes.setIconCls(yesBtnCls); 
Ext.Msg.msgButtons.no.setIconCls(noBtnCls); 
Ext.Msg.msgButtons.cancel.setIconCls(cancelBtnCls); 

Sie auch auf Ihrer makeButton Überschreibung verlassen können, wenn Sie Meldungsfelder zeigen werden, indem eine neue Instanz der Klasse zu erstellen:

var myMsg = Ext.create('Ext.window.MessageBox', { 
    closeAction: 'destroy' 
}).show({ 
    title: 'Custom MessageBox Instance', 
    message: 'I can exist along with Ext.Msg' 
}); 
+0

awesome! Danke für den Punkt. macht wirklich Sinn. –

+0

Ich denke, die 'makeButton'-Überschreibung wird tun .. siehe meine Antwort –