Ext js добавить в Ext msg флажок "Больше не спрашивать" - PullRequest
0 голосов
/ 19 июня 2020

Как я могу добавить в свой Ext.Msg флажок с текстом «больше не спрашивать» , чтобы пользователю не приходилось всегда подтверждать, что он хочет выполнить конкретное c действие (в моем случае отправить сообщение)?

Это мой код:

Ext.Msg.show({
   title: 'Send Message',
   message: 'Are you sure you want to send the message?'
   buttons: Ext.Msg.YESNO,
   fn: function(btn) {
         if (btn === 'yes') {
                 ...
         } else if (btn === 'no') {
                ...
         }
   }
});

1 Ответ

1 голос
/ 19 июня 2020

Я вижу здесь несколько способов, самый тривиальный - это использование файлов 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, в этом случае вам не придется реализовывать механизм внедрения в панель инструментов.

...