///////////////////////////////////////////////////////////////////////////
|
// Copyright © 2014 - 2018 Esri. All Rights Reserved.
|
//
|
// Licensed under the Apache License Version 2.0 (the "License");
|
// you may not use this file except in compliance with the License.
|
// You may obtain a copy of the License at
|
//
|
// http://www.apache.org/licenses/LICENSE-2.0
|
//
|
// Unless required by applicable law or agreed to in writing, software
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
// See the License for the specific language governing permissions and
|
// limitations under the License.
|
///////////////////////////////////////////////////////////////////////////
|
|
define([
|
'dojo/_base/declare',
|
'dojo/Evented',
|
'dojo/on',
|
'dojo/_base/lang',
|
'dojo/_base/html',
|
'jimu/dijit/Popup',
|
'jimu/dijit/DataSource',
|
'jimu/dijit/LoadingIndicator',
|
'esri/request'
|
],
|
function(declare, Evented, on, lang, html, Popup, DataSource, LoadingIndicator, esriRequest) {
|
|
return declare([Popup, Evented], {
|
width: 830,
|
height: 560,
|
titleLabel: window.jimuNls.frameworkDatasource.setDataSource,
|
|
dijitArgs: null,//refer to the parameters of dijit DataSource
|
|
//events:
|
//ok return {name,url,definition}
|
//cancel
|
|
postCreate: function(){
|
this.inherited(arguments);
|
html.addClass(this.domNode, 'jimu-dijit-data-source-popup');
|
this._initFls();
|
this._initLoading();
|
},
|
|
_initFls: function(){
|
this.sourceDijit = new DataSource(this.dijitArgs);
|
this.sourceDijit.placeAt(this.contentContainerNode);
|
this.sourceDijit.startup();
|
|
this.own(on(this.sourceDijit, 'ok', lang.hitch(this, function(items){
|
if(items.length === 0){
|
return;
|
}
|
var item = items[0];
|
if(item.definition){
|
try{
|
item.definition.name = item.name;
|
item.definition.url = item.url;
|
this.emit('ok', item);
|
}catch(e){
|
console.error(e);
|
}
|
}else if(item.url){
|
this.loading.show();
|
esriRequest({
|
url: item.url,
|
content: {f:'json'},
|
handleAs: 'json',
|
callbackParamName: 'callback'
|
}).then(lang.hitch(this, function(response){
|
if(!this.domNode){
|
return;
|
}
|
this.loading.hide();
|
item.definition = response;
|
try{
|
item.definition.name = item.name;
|
item.definition.url = item.url;
|
this.emit('ok', item);
|
}catch(e){
|
console.error(e);
|
}
|
}), lang.hitch(this, function(err){
|
console.error(err);
|
if(!this.domNode){
|
return;
|
}
|
this.loading.hide();
|
}));
|
}else{
|
this.emit('ok', item);
|
}
|
})));
|
|
this.own(on(this.sourceDijit, 'cancel', lang.hitch(this, function(){
|
try{
|
this.emit('cancel');
|
}catch(e){
|
console.error(e);
|
}
|
})));
|
},
|
|
_initLoading: function(){
|
this.loading = new LoadingIndicator({
|
hidden: true
|
});
|
this.loading.placeAt(this.domNode);
|
this.loading.startup();
|
}
|
|
});
|
});
|