source: Dev/trunk/src/client/dijit/tests/_data/SlowStore.js

Last change on this file was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 2.2 KB
Line 
1define(["dojo/_base/declare", "dojo/data/ItemFileReadStore"], function(declare, ItemFileReadStore){
2
3        return declare("dijit.tests._data.SlowStore", ItemFileReadStore, {
4                // summary:
5                //              This wrapper decorates an ItemFileReadStore by delaying queries issued according to the
6                //              length of the query:
7                //
8                //              - empty query: 2000ms,
9                //              - 1 or 2 characters: 1000ms,
10                //              - 3 characters: 500ms,
11                //              - 4 or more characters: 100ms.
12
13                constructor: function(){
14                        this.log = [];
15                },
16
17                fetch: function(/* Object */ keywordArgs){
18                        // Get the query phrase (store into first), and the # of chars it has
19                        var count = 0;
20                        var first;
21                        if("query" in keywordArgs){
22                                var query = keywordArgs.query;
23                                for(var attr in query){
24                                        first = query[attr];
25                                        break;
26                                }
27                                count = first.toString().length;
28                        }
29
30                        var delay = 100;
31                        switch(count || 0){
32                                case 0:
33                                        delay = 2000;
34                                        break;
35                                case 1:
36                                case 2:
37                                        delay = 1000;
38                                        break;
39                                case 3:
40                                        delay = 500;
41                                        break;
42                                case 4:
43                                        delay = 100;
44                                        break;
45                        }
46
47                        this.log.push({
48                                type: "start",
49                                date: new Date(),
50                                query: query,
51                                count: count,
52                                delay: delay
53                        });
54                        console.log("START query on " + (first || "{}") + " (" + count + " chars), delay = " + delay);
55
56                        var that = this,
57                                thatArgs = arguments;
58                        var handle = setTimeout(function(){
59                                that.log.push({
60                                        type: "end",
61                                        date: new Date(),
62                                        query: query,
63                                        count: count,
64                                        delay: delay
65                                });
66                                console.log("END query on " + (first || "{}") + " (" + count + " chars), delay = " + delay);
67                                ItemFileReadStore.prototype.fetch.apply(that, thatArgs);
68                        }, delay);
69
70                        // This abort() method cancels a request before it has even been sent to ItemFileReadStore.
71                        // (Since ItemFileReadStore has already loaded the data (as per code in the test file),
72                        // it operates synchronously; there is never a case to send the cancel request to that object)
73                        keywordArgs.abort = function(){
74                                clearTimeout(handle);
75                                that.log.push({
76                                        type: "cancel",
77                                        date: new Date(),
78                                        query: query,
79                                        count: count,
80                                        delay: delay
81                                });
82                                console.log("CANCEL query on " + (first || "{}") + " (" + count + " chars), delay = " + delay);
83                        };
84
85                        return keywordArgs;
86                }
87        });
88
89});
Note: See TracBrowser for help on using the repository browser.