Upgrade to ExtJS 4.0.7 - Released 10/19/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="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
7   <script type="text/javascript" src="../resources/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 every 3 seconds.
66      */
67     interval: 3000,
68
69 <span id='Ext-direct-PollingProvider-cfg-baseParams'>    /**
70 </span>     * @cfg {Object} baseParams
71      * An object containing properties which are to be sent as parameters on every polling request
72      */
73     
74 <span id='Ext-direct-PollingProvider-cfg-url'>    /**
75 </span>     * @cfg {String/Function} url
76      * The url which the PollingProvider should contact with each request. This can also be
77      * an imported Ext.Direct method which will accept the baseParams as its only argument.
78      */
79
80     // private
81     constructor : function(config){
82         this.callParent(arguments);
83         this.addEvents(
84 <span id='Ext-direct-PollingProvider-event-beforepoll'>            /**
85 </span>             * @event beforepoll
86              * Fired immediately before a poll takes place, an event handler can return false
87              * in order to cancel the poll.
88              * @param {Ext.direct.PollingProvider} this
89              */
90             'beforepoll',            
91 <span id='Ext-direct-PollingProvider-event-poll'>            /**
92 </span>             * @event poll
93              * This event has not yet been implemented.
94              * @param {Ext.direct.PollingProvider} this
95              */
96             'poll'
97         );
98     },
99
100     // inherited
101     isConnected: function(){
102         return !!this.pollTask;
103     },
104
105 <span id='Ext-direct-PollingProvider-method-connect'>    /**
106 </span>     * Connect to the server-side and begin the polling process. To handle each
107      * response subscribe to the data event.
108      */
109     connect: function(){
110         var me = this, url = me.url;
111         
112         if (url &amp;&amp; !me.pollTask) {
113             me.pollTask = Ext.TaskManager.start({
114                 run: function(){
115                     if (me.fireEvent('beforepoll', me) !== false) {
116                         if (Ext.isFunction(url)) {
117                             url(me.baseParams);
118                         } else {
119                             Ext.Ajax.request({
120                                 url: url,
121                                 callback: me.onData,
122                                 scope: me,
123                                 params: me.baseParams
124                             });
125                         }
126                     }
127                 },
128                 interval: me.interval,
129                 scope: me
130             });
131             me.fireEvent('connect', me);
132         } else if (!url) {
133             //&lt;debug&gt;
134             Ext.Error.raise('Error initializing PollingProvider, no url configured.');
135             //&lt;/debug&gt;
136         }
137     },
138
139 <span id='Ext-direct-PollingProvider-method-disconnect'>    /**
140 </span>     * Disconnect from the server-side and stop the polling process. The disconnect
141      * event will be fired on a successful disconnect.
142      */
143     disconnect: function(){
144         var me = this;
145         
146         if (me.pollTask) {
147             Ext.TaskManager.stop(me.pollTask);
148             delete me.pollTask;
149             me.fireEvent('disconnect', me);
150         }
151     },
152
153     // private
154     onData: function(opt, success, response){
155         var me = this, 
156             i = 0, 
157             len,
158             events;
159         
160         if (success) {
161             events = me.createEvents(response);
162             for (len = events.length; i &lt; len; ++i) {
163                 me.fireEvent('data', me, events[i]);
164             }
165         } else {
166             me.fireEvent('data', me, Ext.create('Ext.direct.ExceptionEvent', {
167                 data: null,
168                 code: Ext.direct.Manager.self.exceptions.TRANSPORT,
169                 message: 'Unable to connect to the server.',
170                 xhr: response
171             }));
172         }
173     }
174 });</pre>
175 </body>
176 </html>