Иногда в приложениях требуется обращение к серверу по определенному интервалу времени. Стандартными средствами JavaScript’a это делается примерно так:
setInterval(function() {
RPC.util.Format(function() {
...
});
}, 5000);
Но в ExtJS есть более корректный подход, использовать Ext.direct.PollingProvider. Если кратко, то Ext.direct.PollingProvider — это провайдер, который сам запрашивает данные с сервера с помощью direct-функции по таймеру.
PN.RPC.POLLING_API = {
type: 'itpolling',
pollFn: 'RPC.util.Format,
id: 'datePoller',
interval: 2000,
listeners: {
data: function (provider, e, eOpts) {
// e.response - здесь хранится результат выполнения
var poll = Ext.direct.Manager.getProvider('datePoller');
poll.disconnect(); // если хотим завершить запросы
}
}
};
setInterval()
// register the polling API to the PollingProvider.
Ext.Direct.addProvider(PN.RPC.POLLING_API);
Данный способ отлично подходит если, например, нужно запрашивать какую-либо direct — функцию. В руководстве ExtJS type указан как polling, но здесь используется наши itpolling В нем переопределены некоторые методы для работы с нашим itdirect
!!!Внимание. Помните о том что большое количество запросов к серверу могут «положит» пул IIS
Код провайдера
Ext.define('It.direct.PollingProvider', {
extend: 'Ext.direct.PollingProvider',
alias: 'direct.itpollingprovider',
requires: [
'Ext.Ajax',
'Ext.util.TaskRunner',
'Ext.direct.ExceptionEvent'
],
type: 'itpolling',
/*
* переопределен
*/
onData: function (opt, success, response) {
var me = this,
i, len, events;
if (success) {
//events = me.createEvents(response);
//for (i = 0, len = events.length; i < len; ++i) {
me.fireEvent('data', me, response);
//}
} else {
events = new (Ext).direct.ExceptionEvent({
data: null,
code: Ext.direct.Manager.exceptions.TRANSPORT,
message: 'Unable to connect to the server.',
xhr: response
});
me.fireEvent('data', me, events);
}
},
/*
* переопределен
*/
onPollFn: function (result, event, success, options) {
this.onData(null, success, {
response: result
});
}
})