Как я могу отключить действия пользователя при отображении маски загрузки

#javascript #extjs #extjs4

#javascript #extjs #extjs4

Вопрос:

Я использую ExtJS 4. Мое требование заключается в том, что когда я показываю маску загрузки, щелчки пользователя должны игнорироваться. Как я могу этого добиться?

Комментарии:

1. Это своего рода то, что делает маска загрузки.. можете ли вы подробнее рассказать о своей проблеме?

Ответ №1:

Вы можете установить маску загрузки в теле документа следующим образом…

// показывать счетчик во время всех запросов Ajax var myMask = new Ext.LoadMask(Ext.getBody(), { сообщение: «Пожалуйста, подождите …» });

 // Ajax loading message..
Ext.Ajax.on('beforerequest', myMask.show, myMask);
Ext.Ajax.on('requestcomplete', myMask.hide, myMask);
Ext.Ajax.on('requestexception', myMask.hide, myMask);
  

Итак, когда у вас есть процесс в вашем приложении (обычно в Extjs4 все основные процессы выполняются вызовом Ajax), вы можете получить маску для всего тела.

Или, если это не ваше требование, вы также можете использовать следующий метод…

setLoading( Boolean/ Object / String load, Boolean targetEl) : Ext.Загрузочная маска Этот метод позволяет отображать или скрывать загрузочную маску поверх этого компонента.

Параметры загружаются: Boolean/Object/String True для отображения маски загрузки по умолчанию, объекта конфигурации, который будет передан конструктору маски загрузки, или строки сообщения для отображения. False, чтобы скрыть текущую LoadMask. targetEl : Логическое значение True, чтобы замаскировать целевой объект этого компонента вместо this.el. Например, установка для этого значения true на панели приведет к маскированию только тела. (по умолчанию false) Возвращает Ext .LoadMask Экземпляр LoadMask, который только что был показан.

Ответ №2:

Вы можете проверить, загружается ли маска загрузки, используя свойство element.loadMask.loading

 xtype: 'button',
handler: function() {
    this.setLoading(true);
    if (!this.loadMask.loading) {
        //click action
    }
}
  

Комментарии:

1. Спасибо за информацию. Позвольте мне подробнее остановиться на моем требовании. Я маскирую весь экран просмотра, когда выполняется определенное действие. В течение этого времени, если пользователь нажимает в любом месте экрана, они должны игнорироваться. на моей странице много вкладок и других элементов, и щелчок пользователя по всем из них не должен ставиться в очередь. Основываясь на вашем предложении, я должен перейти к каждому элементу, чтобы выполнить это. Я искал централизованный способ отключения пользовательских кликов при отображении маски области просмотра

2. Использование setLoading(true) в окне просмотра маскирует весь экран, а элементы внутри окна просмотра не должны быть интерактивными. По крайней мере, их нет, когда я тестирую. Ext.getCmp(‘viewport’).setLoading(true);