TypeError:在Dojo FilteringSelect onChange回调中未定义this._url

时间:2016-03-23 11:45:12

标签: javascript dojo arcgis-js-api

我在Dojo FilteringSelect的回调中不断收到以下错误:TypeError: this._url is undefined

我将代码简化为:

var testFeatures = [
{   "id": 1, "Adresa": "Pyšvejcova 6, Kotěhůlky"},
...
];

var filteringSelect = new FilteringSelect({
    id: "testSelect",
    autoComplete: false,
    searchAttr: "Adresa",
    store: new Memory({ data: testFeatures }),
    onChange: this.onSelected
}, "testSelect");
filteringSelect.startup();

//end of the function, still in the same define callback

onSelected: function () {
    //custom processing
    var queryTask = new esri.tasks.QueryTask(this.serviceUrl);
    var query = new esri.tasks.Query();
    query.outFields = ["OBJECTID"];
    query.where = "Adresa=" + dojo.byId("testSelect").value;
    query.returnGeometry = true;
    queryTask.execute(query, this.zoomToSelected);
}

zoomToSelected: function (featureSet) {
    //custom map processing
}

和HTML:

<input id="testSelect" data-dojo-attach-point="testSelect" />

我不知道问题出在哪里,谷歌发现没有与我相似的案例。 FireBug说错误发生在init.js.控制台说第199行,但有问题的代码(...nction(){},onExecuteForCountComplete:function(){},onExecuteForExtentComplete:fun...)在第256行。

问题的一个可能原因可能是ArcGIS JavaScript API或Web AppBuilder - 这似乎不是ArcGIS-heavy&#34;部分代码,但我不确定。它适用于开发人员版本1.4的ArcGIS JS API 3.15(Dojo 1.10)和Web AppBuilder。

编辑:在@KenFranqueiro和this post的帮助下,我取得了一些进展。我不能说我完全理解onChange回调,但我学会了在调用命名函数时省略括号。仍然没有调用onSelected,但修改输入数据以包含id解决了这个问题。但它并没有解决主要问题......

现在旧的TypeError: this._url is undefined出现在queryTask.execute,或者它与zoomToSelected方法的开头之间。发生错误的确切位置更改为第256行,第351列,并带有以下引用代码:

...e:function(a,b,c,d,f){var m=f.assembly;a=this._encode(n.mixin({},this._url.query...

在&#34; a&#34;之后有一个指针,所以错误似乎在它的右侧,试图将不存在的东西混合到别的东西。我不知道this中的init.js应该是什么意思。不幸的是,dojo核心代码在没有一些去混淆的情况下几乎是不可取的。这是我唯一的选择,还是有人知道如何解决它?

因此调试init.js并非如此困难,QueryTaskthis。据我所知,这不应该有_url属性。所以我在queryTask也必须有一些错误。

已过时的部分问题,已归档:

我想知道这个问题是否可能是由onChange回调的论点引起的,我并不理解。我已经阅读了几个带有onChange事件集的Dojo FilteringSelect示例,例如the official one。通常它有一些争论,但我不知道它意味着什么,它来自何处。在官方示例中,它对应于div id而没有别的。但是,id如何转换为变量,甚至我的假设id是否正确。 detailed documentation在这种情况下没什么用处。

旧编辑: testSelect是一个对象。似乎它是使用dom隐式创建的 - 它是this.domNode的子节点。所以现在我明白它的来源,但不知道如何准备另一个函数来调用更改以及为什么正确的语法就是它。

另外,我不知道究竟有问题的未定义this._url应该存在于何处。在我的示例中,this引用了dijit,但我不知道问题发生的init.js部分的范围是什么。

我不确定这两个子问题有多少相关(onChange回调中的混淆以及init.js中对此的识别),我只是认为它们是同一问题的症状,因为在我的代码中的onChange事件中抛出错误。

1 个答案:

答案 0 :(得分:0)

查询中的问题是由this.serviceUrl导致错误的coontext缺失,或者是对象而不是URL字符串。因此,最后一步是确保使用正确的上下文(lang/hitch),然后将this.serviceUrl设置为我最初的想法,引用为serviceUrl的对象的属性之一之前。