TypeError:这个_在Dojo FilteringSelect-onChange回调中未定义url

TypeError: this._url is undefined at Dojo FilteringSelect onChange callback

本文关键字:回调 未定义 url FilteringSelect-onChange Dojo 这个 TypeError      更新时间:2023-09-26

我在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"的部分之一,但我不确定。它是ArcGIS JS API 3.15(Dojo 1.10)和面向开发人员的Web AppBuilder 1.4版。

编辑:在@KenFranqueiro和这篇帖子的帮助下,我取得了一些进展。我不能说我完全理解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...

在"a"后面的=处有一个指针,所以错误似乎在它的右边,试图将不存在的东西与其他东西混合。我不知道init.js中的this应该是什么意思。不幸的是,dojo核心代码在没有去模糊处理的情况下几乎是不可调试的。这是我唯一的选择,还是有人知道如何解决?

所以调试init.js并不那么困难,它将QueryTask作为this。据我所知,这不应该有_url属性。所以我在queryTask中肯定也有一些错误。

问题的过时部分,存档:

我想知道这个问题是否是由onChange回调的参数引起的,我真的不明白。我已经阅读了几个带有onChange事件集的DojoFilteringSelect的例子,比如官方的例子。通常它会有一些争论,但我不知道它是什么意思,它从哪里来。在官方示例中,它对应于div id,而没有其他内容。然而,id是如何转换为变量的,甚至我认为它是id的假设是否正确。在这种情况下,详细的文档没有多大帮助。

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

此外,我不知道有问题的未定义this._url应该存在于哪里。在我的示例中,this指的是dijit,但我不知道init.js中出现问题的部分的范围是什么。

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

查询中的问题是由于this.serviceUrl作为错误的coontext的一部分丢失,或者是一个对象而不是URL字符串。因此,最后一步是确保(lang/hitch)使用了正确的上下文,然后将this.serviceUrl设置为我最初认为的内容,这是之前引用为serviceUrl的对象的属性之一。