私は arcgis Javascript Api 3.7 (dojo 1.9.1 を含む) を使用しており、2 つの filteringSelect コントロールを持つカスタム テンプレート化された dijit を開発しています。ユーザーは、その特定の瞬間にデータ ストアを設定する最初の項目から 1 つの項目を選択します。この 2 番目の filteringSelect は毎回正しく入力されますが、関数ハンドラーが起動されないため、onchange イベントで何かが発生します。2 番目の FilterinSelect の onchange イベントで他のスタッフを実行する必要があります。
2番目のfilteringSelectで何かが台無しになっているようです(ハンドラーコンテキストで何かを推測しています)が、まだわかりません。
私の 2 つのフィルタリング コントロール テンプレート宣言 (私の dijit html テンプレートの一部:
<tr>
<td>
Capa:
</td>
<td>
<input data-dojo-type="dijit.form.ComboBox" name="layerDijit" id="layerDijit"
data-dojo-props="autoComplete:true, required:true, searchAttr:'name', style:'width:100%;'"
data-dojo-attach-point="layerDijit" data-dojo-attach-event="change:_handleLayerSelected"/>
</td>
</tr>
<tr>
<td>
Campo:
</td>
<td>
<input data-dojo-type="dijit.form.FilteringSelect" name="fieldDijit" id="fieldDijit"
data-dojo-props="autoComplete:true, required:true, searchAttr:'name', style:'width:100%;'"
data-dojo-attach-point="fieldDijit" data-dojo-attach-event="change:_handleFieldSelected"/>
</td>
</tr>
Dijit JS スクリプト:
最初の Filtering Select を設定するコード
postCreate: function() {
this.inherited(arguments);
....
this.rootMapLayer = this.map.getLayer("ELAPAS");
if (this.rootMapLayer.loaded){
this.listLayers(this.rootMapLayer);
}
else{
this.rootMapLayer.on("load", lang.hitch(this, this.listLayers));
}
//enlace de eventos (tested this, and it doesn't work for the second filtering select either)
//this.fieldDijit.on('change', lang.hitch(this, this._handleFieldSelected));
//this.layerDijit.on('change', lang.hitch(this, this._handleLayerSelected));
},
listLayers: function() {
var layerInfos = [];
layerInfos = array.filter(this.rootMapLayer.layerInfos,function(info,index){
return info.subLayerIds === null;
});
if(layerInfos.length === 0) {
console.error("No se encontro ninguna capa para el servicio de mapa seleccionado");
return;
}
var layersStore = new Memory({
data: layerInfos
});
this.layerDijit.set('store', layersStore);
},
layerDijit と呼ばれる最初の filteringSelect で選択の変更を処理し、2 番目のもの (FieldDijit) のデータをロードするコード:
_handleLayerSelected: function () {
var selectedLayer = this.layerDijit.item;
if(this.getSelectedLayerUrl() === null) {
return;
}
//Se limpia el campo actual
this.fieldDijit.set("value", "");
//Se arma la url del layer específico para traer la información de la capa (sus campos)
var layerUrl = this.rootMapLayer.url + "/" + selectedLayer.id;
esri.request({
url: layerUrl,
content: {
f: "json"
},
handleAs: "json",
callbackParamName: 'callback',
load: lang.hitch(this, '_handleLayerInfo'),
error: lang.hitch(this, '_handleLayerInfoError')
});
},
_handleLayerInfo: function(data) {
var layerInfo = data;
if (!layerInfo.fields) {
console.error("No se pudo obtener la información de los campos de la capa");
return;
}
var fieldsStore = new Memory({
data: layerInfo.fields
});
this.fieldDijit.set('store', fieldsStore);
},
getSelectedLayerUrl: function(){
var selectedLayer = this.layerDijit.item;
if(!selectedLayer) {
return null;
}
//Se arma la url del layer específico para traer la información de la capa (sus campos)
return this.rootMapLayer.url + "/" + selectedLayer.id;
},
_handleLayerInfoError: function(err){
console.error(err);
},
起動されない関数、2 番目のフィルター選択の se change イベントを処理することが想定されている関数:
_handleFieldSelected: function () {
alert("doesn't get fired");
/*var selectedField = this.fieldDijit.item;
if(!selectedField) {
return;
} */
},
この問題についてアドバイスをいただけますか?, 何が間違っているのでしょうか?.
前もって感謝します