Skip to content

Commit 2fbf2e1

Browse files
committed
Updates to getLayerJSON method.
1 parent b1883e3 commit 2fbf2e1

File tree

3 files changed

+93
-48
lines changed

3 files changed

+93
-48
lines changed

widgets/AttributesTable/_QueryTaskMixin.js

+20-10
Original file line numberDiff line numberDiff line change
@@ -549,10 +549,15 @@ define([
549549

550550
getLayerJSON: function (url) {
551551
var deferred = new Deferred();
552+
var layerJSON = this.layerJSON;
552553

553-
if (this.layerJSON[url]) {
554-
deferred.resolve(this.layerJSON[url]);
554+
if (layerJSON[url]) {
555+
if (layerJSON[url].promise) {
556+
return layerJSON[url].promise;
557+
}
558+
deferred.resolve(layerJSON[url]);
555559
} else {
560+
layerJSON[url] = deferred;
556561
esriRequest({
557562
url: url,
558563
parameters: {
@@ -562,16 +567,21 @@ define([
562567
f: 'json'
563568
},
564569
handleAs: 'json',
565-
callbackParamName: 'callback',
566-
load: lang.hitch(this, function (data) {
567-
this.layerJSON[url] = data;
568-
deferred.resolve(this.layerJSON[url]);
570+
callbackParamName: 'callback'
571+
}, {
572+
disableIdentityLookup: false,
573+
usePost: false,
574+
useProxy: false
575+
}).then(
576+
lang.hitch(this, function (data) {
577+
layerJSON[url] = data;
578+
deferred.resolve(layerJSON[url]);
569579
}),
570-
error: lang.hitch(this, function () {
571-
this.layerJSON[url] = {};
572-
deferred.resolve(this.layerJSON[url]);
580+
lang.hitch(this, function () {
581+
layerJSON[url] = {};
582+
deferred.resolve(layerJSON[url]);
573583
})
574-
});
584+
);
575585
}
576586

577587
return deferred.promise;

widgets/Search.js

+20-10
Original file line numberDiff line numberDiff line change
@@ -1352,10 +1352,15 @@ define([
13521352

13531353
getLayerJSON: function (url) {
13541354
var deferred = new Deferred();
1355+
var layerJSON = this.layerJSON;
13551356

1356-
if (this.layerJSON[url]) {
1357-
deferred.resolve(this.layerJSON[url]);
1357+
if (layerJSON[url]) {
1358+
if (layerJSON[url].promise) {
1359+
return layerJSON[url].promise;
1360+
}
1361+
deferred.resolve(layerJSON[url]);
13581362
} else {
1363+
layerJSON[url] = deferred;
13591364
esriRequest({
13601365
url: url,
13611366
parameters: {
@@ -1365,16 +1370,21 @@ define([
13651370
f: 'json'
13661371
},
13671372
handleAs: 'json',
1368-
callbackParamName: 'callback',
1369-
load: lang.hitch(this, function (data) {
1370-
this.layerJSON[url] = data;
1371-
deferred.resolve(this.layerJSON[url]);
1373+
callbackParamName: 'callback'
1374+
}, {
1375+
disableIdentityLookup: false,
1376+
usePost: false,
1377+
useProxy: false
1378+
}).then(
1379+
lang.hitch(this, function (data) {
1380+
layerJSON[url] = data;
1381+
deferred.resolve(layerJSON[url]);
13721382
}),
1373-
error: lang.hitch(this, function () {
1374-
this.layerJSON[url] = {};
1375-
deferred.resolve(this.layerJSON[url]);
1383+
lang.hitch(this, function () {
1384+
layerJSON[url] = {};
1385+
deferred.resolve(layerJSON[url]);
13761386
})
1377-
});
1387+
);
13781388
}
13791389

13801390
return deferred.promise;

widgets/Search/QueryBuilder/QueryBuilderMixin.js

+53-28
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ define([
149149
}
150150

151151
if (!advancedSearchOptions.fields || advancedSearchOptions.fetchAllFields) {
152-
queries.push(this._fetchAllFields().then(lang.hitch(this, function (esriFields) {
153-
array.forEach(esriFields, function (f) {
152+
queries.push(this.getLayerJSON(this.url).then(lang.hitch(this, function (data) {
153+
array.forEach(data.fields, function (f) {
154154
var parsed = this._parseESRIField(f);
155155
parsed = lang.mixin(parsed, {
156156
caseInsensitive: defaultToCaseInsensitive
@@ -167,8 +167,57 @@ define([
167167
return when(null);
168168
},
169169

170+
getLayerJSON: function (url) {
171+
var deferred = new Deferred();
172+
var layerJSON = this.options.layerJSON;
173+
174+
if (layerJSON[url]) {
175+
if (layerJSON[url].promise) {
176+
return layerJSON[url].promise;
177+
}
178+
deferred.resolve(layerJSON[url]);
179+
} else {
180+
layerJSON[url] = deferred;
181+
esriRequest({
182+
url: url,
183+
parameters: {
184+
f: 'json'
185+
},
186+
content: {
187+
f: 'json'
188+
},
189+
handleAs: 'json',
190+
callbackParamName: 'callback'
191+
}, {
192+
disableIdentityLookup: false,
193+
usePost: false,
194+
useProxy: false
195+
}).then(
196+
lang.hitch(this, function (data) {
197+
layerJSON[url] = data;
198+
deferred.resolve(layerJSON[url]);
199+
}),
200+
lang.hitch(this, function () {
201+
layerJSON[url] = {};
202+
deferred.resolve(layerJSON[url]);
203+
})
204+
);
205+
}
206+
207+
return deferred.promise;
208+
},
209+
170210
getLayerURL: function (qp) {
171211
var url = qp.url;
212+
213+
if (url && qp.sublayerID) {
214+
var len = url.length;
215+
if (url.substring(len - 1, len) === '/') {
216+
url = url.substring(0, len - 1);
217+
}
218+
url += '/' + qp.sublayerID;
219+
}
220+
172221
if (!url && qp.layerID) {
173222
var layer = this.options.map.getLayer(qp.layerID);
174223
if (layer) {
@@ -209,31 +258,6 @@ define([
209258
this.qbOptions.filters = [];
210259
},
211260

212-
_fetchAllFields: function () {
213-
var deferred = new Deferred();
214-
var content = {
215-
f: 'json'
216-
},
217-
options = {
218-
disableIdentityLookup: false,
219-
usePost: false,
220-
useProxy: false
221-
};
222-
esriRequest({
223-
url: this.url,
224-
callbackParamName: 'callback',
225-
content: content
226-
}, options).then(
227-
function (data) {
228-
deferred.resolve(data.fields);
229-
},
230-
function () {
231-
deferred.reject();
232-
}
233-
);
234-
return deferred;
235-
},
236-
237261
_fetchSelectOptions: function (field) {
238262
var distinct = new GetDistinctValues(this.url, field.id, this.search.where);
239263
return distinct.executeQuery()
@@ -542,7 +566,8 @@ define([
542566

543567
this.queryBuilder.init({
544568
targetDOM: this.divAdvancedQueryBuilder,
545-
map: this.map
569+
map: this.map,
570+
layerJSON: this.layerJSON
546571
});
547572
return this.getQueryBuilder();
548573
},

0 commit comments

Comments
 (0)