2016-03-23 23 views
0

在Dojo FilteringSelect的回調中,我總是收到以下錯誤:TypeError: this._url is undefinedTypeError:this._url在Dojo FilteringSelect onChange回調中未定義

我簡化我的代碼如下:

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重」部分之一的代碼,但我不確定。它是ArcGIS JS API 3.15(Dojo 1.10)和適用於開發人員版本1.4的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... 

有一個在後的「a」 =一個指針,所以該錯誤似乎是它的右側,試圖混入一些不存在的東西與別的東西。我不知道init.js中的this應該是什麼意思。不幸的是,dojo核心代碼幾乎不可解碼,沒有一些解除混淆的問題。這是我唯一的選擇,還是有人知道如何解決它?

因此調試init.js並不難,需要QueryTask作爲this。據我所知,這不應該有_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事件中拋出我的代碼。

+0

'onSelected'是什麼?它是一個返回函數的函數嗎?否則,你可能實際上並不想在設置'onChange'時調用它...爲此,testSelect甚至被定義爲一個變量? –

+0

@KenFranqueiro:編輯。我希望現在更清楚。 –

回答

0

查詢中的問題是由於this.serviceUrl或者作爲錯誤的coontext的一部分而丟失,或者是作爲對象而不是URL字符串造成的。因此,最後一步是確保使用正確的上下文(通過lang/hitch),然後設置this.serviceUrl爲我最初的想法,即之前引用爲serviceUrl的對象的屬性之一。