source: Dev/branches/rest-dojo-ui/client/rft/store.js @ 340

Last change on this file since 340 was 311, checked in by hendrikvanantwerpen, 13 years ago

[Client] Use toaster to show errors from server
[Client] Create widget for mainmenu, cleaner loading of index.html now.
[Server] Renamed answerset datetime to more meaningful creationdate

File size: 2.7 KB
Line 
1define(['dojo/_base/lang','dojo/_base/array','dojo/_base/Deferred','dojo/store/JsonRest','./api'],
2    function(lang,array,Deferred,JsonRest,api){
3   
4        var OBJ_TYPE = '__objectType';
5        var OBJ_UID = '__objectUid';
6        var REF_TYPE = '__referenceType';
7        var REF_UID = '__referenceUid';
8
9        var RftObject = function(values) {
10            var self = this;
11            lang.mixin(this,values);
12            self.getUid = function() {
13                return self[OBJ_UID];
14            }
15        };
16   
17        var rftStoreCtor = function(objectType) {
18            var jsonStore = new JsonRest({
19                target:"../server/api.php/data/"+objectType+"/",
20                idProperty: OBJ_UID
21            });
22            var errHandler = api.defaultErrorHandler;
23            return lang.delegate(jsonStore,{
24                query: function(query, directives){
25                    return Deferred.when( jsonStore.query(query,directives), function(results){
26                        return array.map(results,function(result){
27                            return new RftObject(typeof result == "object" ? result : object);
28                        });
29                    },errHandler);
30                },
31                get: function(id, directives){
32                    return Deferred.when( jsonStore.get(id,directives), function(result){
33                        return new RftObject(typeof result == "object" ? result : object);
34                    },errHandler);
35                },
36                add: function(object, directives){
37                    return Deferred.when( jsonStore.add(object,directives), function(result){
38                        return new RftObject(typeof result == "object" ? result : object);
39                    },errHandler);
40                },
41                put: function(object, directives){
42                    return Deferred.when( jsonStore.put(object,directives), function(result) {
43                        return new RftObject(typeof result == "object" ? result : object);
44                    },errHandler);
45                },
46                remove: function(id, directives){
47                    return jsonStore.remove(id,directives);
48                }
49            });
50        };
51   
52        var storeCache = {};
53   
54        return {
55            getStore: function(objectType) {
56                if ( !storeCache[objectType] ) {
57                    storeCache[objectType] = new rftStoreCtor(objectType);
58                }
59                return storeCache[objectType];
60            },
61            dereference: function(object) {
62                if ( object[REF_TYPE] ) {
63                    return this.getStore(object[REF_TYPE]).get(object[REF_UID]);
64                }
65                return object;
66            }
67        };
68
69    });
Note: See TracBrowser for help on using the repository browser.