@@ -13,7 +13,7 @@ define([
13
13
return Class . extend ( {
14
14
defaults : {
15
15
cacheRequests : true ,
16
- cachedRequestDelay : 500 ,
16
+ cachedRequestDelay : 50 ,
17
17
indexField : 'entity_id' ,
18
18
data : { }
19
19
} ,
@@ -61,24 +61,23 @@ define([
61
61
getIds : function ( data ) {
62
62
data = data || this . data ;
63
63
64
- return _ . map ( data , function ( item ) {
65
- return item [ this . indexField ] ;
66
- } , this ) ;
64
+ return _ . pluck ( data , this . indexField ) ;
67
65
} ,
68
66
69
67
/**
68
+ * Extracts data which matches specified parameters.
70
69
*
71
- * @param {Object } params
70
+ * @param {Object } params - Request parameters.
72
71
* @param {Object } [options={}]
73
72
* @returns {jQueryPromise }
74
73
*/
75
74
getData : function ( params , options ) {
76
- var cachedRequest = this . getCachedRequest ( params ) ;
75
+ var cachedRequest = this . getRequest ( params ) ;
77
76
78
77
options = options || { } ;
79
78
80
79
return ! options . refresh && cachedRequest ?
81
- this . getCachedRequestData ( cachedRequest ) :
80
+ this . getRequestData ( cachedRequest ) :
82
81
this . requestData ( params ) ;
83
82
} ,
84
83
@@ -104,13 +103,14 @@ define([
104
103
* @returns {jQueryPromise }
105
104
*/
106
105
requestData : function ( params ) {
107
- var handler = this . onRequestComplete . bind ( this , params ) ,
106
+ var query = utils . copy ( params ) ,
107
+ handler = this . onRequestComplete . bind ( this , query ) ,
108
108
request ;
109
109
110
110
request = $ . ajax ( {
111
111
url : this . updateUrl ,
112
112
method : 'GET' ,
113
- data : params ,
113
+ data : query ,
114
114
dataType : 'json'
115
115
} ) . done ( handler ) ;
116
116
@@ -124,19 +124,19 @@ define([
124
124
* @param {Object } params - Request parameters.
125
125
* @returns {Object } Instance of request.
126
126
*/
127
- getCachedRequest : function ( params ) {
127
+ getRequest : function ( params ) {
128
128
return _ . find ( this . _requests , function ( request ) {
129
129
return _ . isEqual ( params , request . params ) ;
130
130
} , this ) ;
131
131
} ,
132
132
133
133
/**
134
- * Forms data object associated with a provided request.
134
+ * Forms data object associated with provided request.
135
135
*
136
136
* @param {Object } request - Request object.
137
137
* @returns {jQueryPromise }
138
138
*/
139
- getCachedRequestData : function ( request ) {
139
+ getRequestData : function ( request ) {
140
140
var defer = $ . Deferred ( ) ,
141
141
resolve = defer . resolve . bind ( defer ) ,
142
142
delay = this . cachedRequestDelay ,
@@ -155,19 +155,25 @@ define([
155
155
} ,
156
156
157
157
/**
158
+ * Caches requests object with provdided parameters
159
+ * and data object associated with it.
158
160
*
159
161
* @param {Object } data - Data associated with request.
160
162
* @param {Object } params - Request parameters.
161
163
* @returns {DataStorage } Chainable.
162
164
*/
163
165
cacheRequest : function ( data , params ) {
164
- var request = {
166
+ var cached = this . getRequest ( params ) ;
167
+
168
+ if ( cached ) {
169
+ this . removeRequest ( cached ) ;
170
+ }
171
+
172
+ this . _requests . push ( {
165
173
ids : this . getIds ( data . items ) ,
166
- params : utils . copy ( params ) ,
174
+ params : params ,
167
175
totalRecords : data . totalRecords
168
- } ;
169
-
170
- this . _requests . push ( request ) ;
176
+ } ) ;
171
177
172
178
return this ;
173
179
} ,
@@ -177,7 +183,7 @@ define([
177
183
*
178
184
* @returns {DataStorage } Chainable.
179
185
*/
180
- clearCachedRequests : function ( ) {
186
+ clearRequests : function ( ) {
181
187
this . _requests . splice ( 0 ) ;
182
188
183
189
return this ;
@@ -189,7 +195,7 @@ define([
189
195
* @param {Object } request - Request object.
190
196
* @returns {DataStorage } Chainable.
191
197
*/
192
- removeCachedRequest : function ( request ) {
198
+ removeRequest : function ( request ) {
193
199
var requests = this . _requests ,
194
200
index = requests . indexOf ( request ) ;
195
201
@@ -207,7 +213,7 @@ define([
207
213
* @returns {Boolean }
208
214
*/
209
215
wasRequested : function ( params ) {
210
- return ! ! this . getCachedRequest ( params ) ;
216
+ return ! ! this . getRequest ( params ) ;
211
217
} ,
212
218
213
219
/**
0 commit comments