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