source: Dev/trunk/src/client/dojo/store/Memory.js

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

Added Dojo 1.9.3 release.

File size: 4.9 KB
Line 
1define(["../_base/declare", "./util/QueryResults", "./util/SimpleQueryEngine" /*=====, "./api/Store" =====*/],
2function(declare, QueryResults, SimpleQueryEngine /*=====, Store =====*/){
3
4// module:
5//              dojo/store/Memory
6
7// No base class, but for purposes of documentation, the base class is dojo/store/api/Store
8var base = null;
9/*===== base = Store; =====*/
10
11return declare("dojo.store.Memory", base, {
12        // summary:
13        //              This is a basic in-memory object store. It implements dojo/store/api/Store.
14        constructor: function(options){
15                // summary:
16                //              Creates a memory object store.
17                // options: dojo/store/Memory
18                //              This provides any configuration information that will be mixed into the store.
19                //              This should generally include the data property to provide the starting set of data.
20                for(var i in options){
21                        this[i] = options[i];
22                }
23                this.setData(this.data || []);
24        },
25        // data: Array
26        //              The array of all the objects in the memory store
27        data:null,
28
29        // idProperty: String
30        //              Indicates the property to use as the identity property. The values of this
31        //              property should be unique.
32        idProperty: "id",
33
34        // index: Object
35        //              An index of data indices into the data array by id
36        index:null,
37
38        // queryEngine: Function
39        //              Defines the query engine to use for querying the data store
40        queryEngine: SimpleQueryEngine,
41        get: function(id){
42                // summary:
43                //              Retrieves an object by its identity
44                // id: Number
45                //              The identity to use to lookup the object
46                // returns: Object
47                //              The object in the store that matches the given id.
48                return this.data[this.index[id]];
49        },
50        getIdentity: function(object){
51                // summary:
52                //              Returns an object's identity
53                // object: Object
54                //              The object to get the identity from
55                // returns: Number
56                return object[this.idProperty];
57        },
58        put: function(object, options){
59                // summary:
60                //              Stores an object
61                // object: Object
62                //              The object to store.
63                // options: dojo/store/api/Store.PutDirectives?
64                //              Additional metadata for storing the data.  Includes an "id"
65                //              property if a specific id is to be used.
66                // returns: Number
67                var data = this.data,
68                        index = this.index,
69                        idProperty = this.idProperty;
70                var id = object[idProperty] = (options && "id" in options) ? options.id : idProperty in object ? object[idProperty] : Math.random();
71                if(id in index){
72                        // object exists
73                        if(options && options.overwrite === false){
74                                throw new Error("Object already exists");
75                        }
76                        // replace the entry in data
77                        data[index[id]] = object;
78                }else{
79                        // add the new object
80                        index[id] = data.push(object) - 1;
81                }
82                return id;
83        },
84        add: function(object, options){
85                // summary:
86                //              Creates an object, throws an error if the object already exists
87                // object: Object
88                //              The object to store.
89                // options: dojo/store/api/Store.PutDirectives?
90                //              Additional metadata for storing the data.  Includes an "id"
91                //              property if a specific id is to be used.
92                // returns: Number
93                (options = options || {}).overwrite = false;
94                // call put with overwrite being false
95                return this.put(object, options);
96        },
97        remove: function(id){
98                // summary:
99                //              Deletes an object by its identity
100                // id: Number
101                //              The identity to use to delete the object
102                // returns: Boolean
103                //              Returns true if an object was removed, falsy (undefined) if no object matched the id
104                var index = this.index;
105                var data = this.data;
106                if(id in index){
107                        data.splice(index[id], 1);
108                        // now we have to reindex
109                        this.setData(data);
110                        return true;
111                }
112        },
113        query: function(query, options){
114                // summary:
115                //              Queries the store for objects.
116                // query: Object
117                //              The query to use for retrieving objects from the store.
118                // options: dojo/store/api/Store.QueryOptions?
119                //              The optional arguments to apply to the resultset.
120                // returns: dojo/store/api/Store.QueryResults
121                //              The results of the query, extended with iterative methods.
122                //
123                // example:
124                //              Given the following store:
125                //
126                //      |       var store = new Memory({
127                //      |               data: [
128                //      |                       {id: 1, name: "one", prime: false },
129                //      |                       {id: 2, name: "two", even: true, prime: true},
130                //      |                       {id: 3, name: "three", prime: true},
131                //      |                       {id: 4, name: "four", even: true, prime: false},
132                //      |                       {id: 5, name: "five", prime: true}
133                //      |               ]
134                //      |       });
135                //
136                //      ...find all items where "prime" is true:
137                //
138                //      |       var results = store.query({ prime: true });
139                //
140                //      ...or find all items where "even" is true:
141                //
142                //      |       var results = store.query({ even: true });
143                return QueryResults(this.queryEngine(query, options)(this.data));
144        },
145        setData: function(data){
146                // summary:
147                //              Sets the given data as the source for this store, and indexes it
148                // data: Object[]
149                //              An array of objects to use as the source of data.
150                if(data.items){
151                        // just for convenience with the data format IFRS expects
152                        this.idProperty = data.identifier;
153                        data = this.data = data.items;
154                }else{
155                        this.data = data;
156                }
157                this.index = {};
158                for(var i = 0, l = data.length; i < l; i++){
159                        this.index[data[i][this.idProperty]] = i;
160                }
161        }
162});
163
164});
Note: See TracBrowser for help on using the repository browser.