Я вижу здесь несколько способов, самый тривиальный - это использование файлов cookie для запоминания решения пользователя В БРАУЗЕРЕ. Другое решение - запомнить решение на стороне сервера, в этом случае не будет зависимости от браузера. В следующем примере я использовал файлы cookie и обернул Ext.msg.show (...) в другой одноэлементный класс.
Ext.define('CustomMsg', {
singleton: true,
cookiePrefiex: 'DontShowMessageBox',
cookieToolbarId: 'CookieToolbar',
show: function (messageBoxId, config) {
var cookieName = this.getCookieName(messageBoxId),
me = this;
if(Ext.util.Cookies.get(cookieName) === 'true') {
return;
}
var msgBox = Ext.Msg.show(config);
this.addCookieToolbar(cookieName, msgBox);
msgBox.on('hide', function(msgBox) {
this.removeCookieToolbar(msgBox);
}, this, {single: true});
},
addCookieToolbar: function(cookieName, msgBox) {
msgBox.add({
xtype: 'toolbar',
itemId: this.cookieToolbarId,
items: [{
xtype: 'checkbox',
fieldLabel: "don't ask anymore",
listeners: {
change: function (checkbox, newValue) {
Ext.util.Cookies.set(cookieName, newValue);
}
}
}]
});
return this;
},
removeCookieToolbar: function(msgBox) {
var cookieToolbar = msgBox.getComponent(this.cookieToolbarId);
if(cookieToolbar) {
msgBox.remove(cookieToolbar);
}
return this;
},
getCookieName(checkBoxId) {
return this.cookiePrefiex + '-' + checkBoxId;
}
});
Fiddle
Вы можете также создайте свой собственный MessageBox на основе Ext.panel.Panel, в этом случае вам не придется реализовывать механизм внедрения в панель инструментов.