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

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

[Server] Refactored model classes with some meta-programming. Specific classes only define their fields and inherit from class RdfObject?. Changes to handle the new model objects correctly.
[Client] Added rft/store module for uniform resource access. Removed dependencies on 'uid' field name. Added support for references without loading full object nor exposing uri.
[Client] Added reset() to QuestionWidget?.
[RDFAPI] Fixed PHP warning.

File size: 2.6 KB
Line 
1define(['dojo/_base/lang','dojo/_base/array','dojo/_base/Deferred','dojo/store/JsonRest'],
2    function(lang,array,Deferred,JsonRest){
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            return lang.delegate(jsonStore,{
23                query: function(query, directives){
24                    return Deferred.when( jsonStore.query(query,directives), function(results){
25                        return array.map(results,function(result){
26                            return new RftObject(typeof result == "object" ? result : object);
27                        });
28                    });
29                },
30                get: function(id, directives){
31                    return Deferred.when( jsonStore.get(id,directives), function(result){
32                        return new RftObject(typeof result == "object" ? result : object);
33                    });
34                },
35                add: function(object, directives){
36                    return Deferred.when( jsonStore.add(object,directives), function(result){
37                        return new RftObject(typeof result == "object" ? result : object);
38                    });
39                },
40                put: function(object, directives){
41                    return Deferred.when( jsonStore.put(object,directives), function(result) {
42                        return new RftObject(typeof result == "object" ? result : object);
43                    });
44                },
45                remove: function(id, directives){
46                    return jsonStore.remove(id,directives);
47                }
48            });
49        };
50   
51        var storeCache = {};
52   
53        return {
54            getStore: function(objectType) {
55                if ( !storeCache[objectType] ) {
56                    storeCache[objectType] = new rftStoreCtor(objectType);
57                }
58                return storeCache[objectType];
59            },
60            dereference: function(object) {
61                if ( object[REF_TYPE] ) {
62                    return this.getStore(object[REF_TYPE]).get(object[REF_UID]);
63                }
64                return object;
65            }
66        };
67
68    });
Note: See TracBrowser for help on using the repository browser.