nnnjjj123
2020-11-17 1b2c1edb61190eeb19f465ff031eaa3b2a1b8dbc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
///////////////////////////////////////////////////////////////////////////
// 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();
    }
 
  });
});