Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / docs / source / PollingProvider.html
1 <!DOCTYPE html><html><head><title>Sencha Documentation Project</title><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../prettify.css" type="text/css"><link rel="stylesheet" href="../prettify_sa.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script></head><body onload="prettyPrint()"><pre class="prettyprint"><pre><span id='Ext-direct.PollingProvider'>/**
2 </span> * @class Ext.direct.PollingProvider
3  * @extends Ext.direct.JsonProvider
4  *
5  * &lt;p&gt;Provides for repetitive polling of the server at distinct {@link #interval intervals}.
6  * The initial request for data originates from the client, and then is responded to by the
7  * server.&lt;/p&gt;
8  * 
9  * &lt;p&gt;All configurations for the PollingProvider should be generated by the server-side
10  * API portion of the Ext.Direct stack.&lt;/p&gt;
11  *
12  * &lt;p&gt;An instance of PollingProvider may be created directly via the new keyword or by simply
13  * specifying &lt;tt&gt;type = 'polling'&lt;/tt&gt;.  For example:&lt;/p&gt;
14  * &lt;pre&gt;&lt;code&gt;
15 var pollA = new Ext.direct.PollingProvider({
16     type:'polling',
17     url: 'php/pollA.php',
18 });
19 Ext.direct.Manager.addProvider(pollA);
20 pollA.disconnect();
21
22 Ext.direct.Manager.addProvider(
23     {
24         type:'polling',
25         url: 'php/pollB.php',
26         id: 'pollB-provider'
27     }
28 );
29 var pollB = Ext.direct.Manager.getProvider('pollB-provider');
30  * &lt;/code&gt;&lt;/pre&gt;
31  */
32 Ext.define('Ext.direct.PollingProvider', {
33     
34     /* Begin Definitions */
35     
36     extend: 'Ext.direct.JsonProvider',
37     
38     alias: 'direct.pollingprovider',
39     
40     uses: ['Ext.direct.ExceptionEvent'],
41     
42     requires: ['Ext.Ajax', 'Ext.util.DelayedTask'],
43     
44     /* End Definitions */
45     
46 <span id='Ext-direct.PollingProvider-cfg-interval'>    /**
47 </span>     * @cfg {Number} interval
48      * How often to poll the server-side in milliseconds (defaults to &lt;tt&gt;3000&lt;/tt&gt; - every
49      * 3 seconds).
50      */
51     interval: 3000,
52
53 <span id='Ext-direct.PollingProvider-cfg-baseParams'>    /**
54 </span>     * @cfg {Object} baseParams An object containing properties which are to be sent as parameters
55      * on every polling request
56      */
57     
58 <span id='Ext-direct.PollingProvider-cfg-url'>    /**
59 </span>     * @cfg {String/Function} url
60      * The url which the PollingProvider should contact with each request. This can also be
61      * an imported Ext.Direct method which will accept the baseParams as its only argument.
62      */
63
64     // private
65     constructor : function(config){
66         this.callParent(arguments);
67         this.addEvents(
68 <span id='Ext-direct.PollingProvider-event-beforepoll'>            /**
69 </span>             * @event beforepoll
70              * Fired immediately before a poll takes place, an event handler can return false
71              * in order to cancel the poll.
72              * @param {Ext.direct.PollingProvider}
73              */
74             'beforepoll',            
75 <span id='Ext-direct.PollingProvider-event-poll'>            /**
76 </span>             * @event poll
77              * This event has not yet been implemented.
78              * @param {Ext.direct.PollingProvider}
79              */
80             'poll'
81         );
82     },
83
84     // inherited
85     isConnected: function(){
86         return !!this.pollTask;
87     },
88
89 <span id='Ext-direct.PollingProvider-method-connect'>    /**
90 </span>     * Connect to the server-side and begin the polling process. To handle each
91      * response subscribe to the data event.
92      */
93     connect: function(){
94         var me = this, url = me.url;
95         
96         if (url &amp;&amp; !me.pollTask) {
97             me.pollTask = Ext.TaskManager.start({
98                 run: function(){
99                     if (me.fireEvent('beforepoll', me) !== false) {
100                         if (Ext.isFunction(url)) {
101                             url(me.baseParams);
102                         } else {
103                             Ext.Ajax.request({
104                                 url: url,
105                                 callback: me.onData,
106                                 scope: me,
107                                 params: me.baseParams
108                             });
109                         }
110                     }
111                 },
112                 interval: me.interval,
113                 scope: me
114             });
115             me.fireEvent('connect', me);
116         } else if (!url) {
117             //&lt;debug&gt;
118             Ext.Error.raise('Error initializing PollingProvider, no url configured.');
119             //&lt;/debug&gt;
120         }
121     },
122
123 <span id='Ext-direct.PollingProvider-method-disconnect'>    /**
124 </span>     * Disconnect from the server-side and stop the polling process. The disconnect
125      * event will be fired on a successful disconnect.
126      */
127     disconnect: function(){
128         var me = this;
129         
130         if (me.pollTask) {
131             Ext.TaskManager.stop(me.pollTask);
132             delete me.pollTask;
133             me.fireEvent('disconnect', me);
134         }
135     },
136
137     // private
138     onData: function(opt, success, response){
139         var me = this, 
140             i = 0, 
141             len,
142             events;
143         
144         if (success) {
145             events = me.createEvents(response);
146             for (len = events.length; i &lt; len; ++i) {
147                 me.fireEvent('data', me, events[i]);
148             }
149         } else {
150             me.fireEvent('data', me, Ext.create('Ext.direct.ExceptionEvent', {
151                 data: null,
152                 code: Ext.direct.Manager.self.exceptions.TRANSPORT,
153                 message: 'Unable to connect to the server.',
154                 xhr: response
155             }));
156         }
157     }
158 });</pre></pre></body></html>