How to fix TypeError: this._url is undefined in ArcGIS JS API (Query)
How to fix TypeError: this._url is undefined in ArcGIS JS API (Query)
我的任务是为 ArcGIS 的 Web App Builder 开发一个自定义小部件,我一直在尝试使用 ArcGIS Javascript API 3.28 使查询工作,以便我可以构建使用图层信息的报告。但是在尝试通过按钮测试查询时,我得到一个 TypeError: this._url is undefined.
define(['dojo/_base/declare', 'jimu/BaseWidget',
'jimu/dijit/Report', 'esri/layers/FeatureLayer',
'jimu/dijit/PageUtils', 'dijit/_WidgetsInTemplateMixin', 'esri/tasks/IdentifyTask',
'esri/tasks/IdentifyParameters', 'esri/symbols/SimpleFillSymbol', 'esri/symbols/SimpleLineSymbol',
'esri/graphic', 'esri/Color', 'dojo/_base/lang',
'dojo/_base/html', 'dojo/on', 'dojo/domReady!',
'esri/tasks/QueryTask', 'esri/tasks/query'],
function(declare, BaseWidget, Report, FeatureLayer,
PageUtils, _WidgetsInTemplateMixin, IdentifyTask, IdentifyParameters,
SimpleFillSymbol, SimpleLineSymbol, Graphic,
Color, lang, on, Query, QueryTaskTest) {
var baseWidgetClass = declare([BaseWidget], {
baseClass: 'jimu-widget-demo',
postCreate: function() { // POST CREATE!
this.inherited(arguments);
this.map.infoWindow.hide();
},
startup: function() {
this.inherited(arguments);
console.log('startup');
},
onClose: function(){
console.log('onClose');
},
_onBtnPrintClicked: function(){
console.log("Begin query test");
var queryUrl = "https://webportalurl/arcgis/rest/services/ServiceName/MapServer/0";
var queryTask = new QueryTaskTest(queryUrl);
var query = new Query();
query.returnGeometry = false;
query.outFields = ["*"];
query.where = "HAB_IPTU = 2089358";
console.log("Running execute");
queryTask.execute(query).then(function(results){
console.log(results.features[0]);
});
}
});
return baseWidgetClass;
});
api 3.28 上的 QueryTask 期望 url 为 String:https://developers.arcgis.com/javascript/3/jsapi/querytask-amd.html#querytask1
试试这个:
var queryTask = new QueryTask(queryUrl);
或
var queryTask = new QueryTask("MapServerUrl");
该问题与 QueryTask 或您如何调用它无关。 define 语句和函数定义中的参数不匹配。
'dojo/_base/lang' 与函数中的 lang 匹配,然后 'dojo/_base/html' 与 on 匹配,'dojo/on' 与 Query 匹配,最后 'dojo/domReady!' 与查询任务测试。在定义列表的末尾使用不需要相应构造函数的模块,否则您必须将它们包含在函数定义中以保留顺序。
像这样
define(['dojo/_base/declare',
'jimu/BaseWidget',
'jimu/dijit/Report',
'esri/layers/FeatureLayer',
'jimu/dijit/PageUtils',
'dijit/_WidgetsInTemplateMixin',
'esri/tasks/IdentifyTask',
'esri/tasks/IdentifyParameters',
'esri/symbols/SimpleFillSymbol',
'esri/symbols/SimpleLineSymbol',
'esri/graphic',
'esri/Color',
'dojo/_base/lang',
'dojo/on',
'esri/tasks/query',
'esri/tasks/QueryTask',
'dojo/_base/html', //these last two are at the end
'dojo/domReady!'], //because they don't need to be called or instantiated directly.
function(declare,
BaseWidget,
Report,
FeatureLayer,
PageUtils,
_WidgetsInTemplateMixin,
IdentifyTask,
IdentifyParameters,
SimpleFillSymbol,
SimpleLineSymbol,
Graphic,
Color,
lang,
on,
Query,
QueryTaskTest) { ....});
我的任务是为 ArcGIS 的 Web App Builder 开发一个自定义小部件,我一直在尝试使用 ArcGIS Javascript API 3.28 使查询工作,以便我可以构建使用图层信息的报告。但是在尝试通过按钮测试查询时,我得到一个 TypeError: this._url is undefined.
define(['dojo/_base/declare', 'jimu/BaseWidget',
'jimu/dijit/Report', 'esri/layers/FeatureLayer',
'jimu/dijit/PageUtils', 'dijit/_WidgetsInTemplateMixin', 'esri/tasks/IdentifyTask',
'esri/tasks/IdentifyParameters', 'esri/symbols/SimpleFillSymbol', 'esri/symbols/SimpleLineSymbol',
'esri/graphic', 'esri/Color', 'dojo/_base/lang',
'dojo/_base/html', 'dojo/on', 'dojo/domReady!',
'esri/tasks/QueryTask', 'esri/tasks/query'],
function(declare, BaseWidget, Report, FeatureLayer,
PageUtils, _WidgetsInTemplateMixin, IdentifyTask, IdentifyParameters,
SimpleFillSymbol, SimpleLineSymbol, Graphic,
Color, lang, on, Query, QueryTaskTest) {
var baseWidgetClass = declare([BaseWidget], {
baseClass: 'jimu-widget-demo',
postCreate: function() { // POST CREATE!
this.inherited(arguments);
this.map.infoWindow.hide();
},
startup: function() {
this.inherited(arguments);
console.log('startup');
},
onClose: function(){
console.log('onClose');
},
_onBtnPrintClicked: function(){
console.log("Begin query test");
var queryUrl = "https://webportalurl/arcgis/rest/services/ServiceName/MapServer/0";
var queryTask = new QueryTaskTest(queryUrl);
var query = new Query();
query.returnGeometry = false;
query.outFields = ["*"];
query.where = "HAB_IPTU = 2089358";
console.log("Running execute");
queryTask.execute(query).then(function(results){
console.log(results.features[0]);
});
}
});
return baseWidgetClass;
});
api 3.28 上的 QueryTask 期望 url 为 String:https://developers.arcgis.com/javascript/3/jsapi/querytask-amd.html#querytask1
试试这个:
var queryTask = new QueryTask(queryUrl);
或
var queryTask = new QueryTask("MapServerUrl");
该问题与 QueryTask 或您如何调用它无关。 define 语句和函数定义中的参数不匹配。
'dojo/_base/lang' 与函数中的 lang 匹配,然后 'dojo/_base/html' 与 on 匹配,'dojo/on' 与 Query 匹配,最后 'dojo/domReady!' 与查询任务测试。在定义列表的末尾使用不需要相应构造函数的模块,否则您必须将它们包含在函数定义中以保留顺序。
像这样
define(['dojo/_base/declare',
'jimu/BaseWidget',
'jimu/dijit/Report',
'esri/layers/FeatureLayer',
'jimu/dijit/PageUtils',
'dijit/_WidgetsInTemplateMixin',
'esri/tasks/IdentifyTask',
'esri/tasks/IdentifyParameters',
'esri/symbols/SimpleFillSymbol',
'esri/symbols/SimpleLineSymbol',
'esri/graphic',
'esri/Color',
'dojo/_base/lang',
'dojo/on',
'esri/tasks/query',
'esri/tasks/QueryTask',
'dojo/_base/html', //these last two are at the end
'dojo/domReady!'], //because they don't need to be called or instantiated directly.
function(declare,
BaseWidget,
Report,
FeatureLayer,
PageUtils,
_WidgetsInTemplateMixin,
IdentifyTask,
IdentifyParameters,
SimpleFillSymbol,
SimpleLineSymbol,
Graphic,
Color,
lang,
on,
Query,
QueryTaskTest) { ....});