我正在开发一个Web应用程序,并尝试根据ArcGIS地图服务中内置的查询设置组合框。我根据查询设置了第一个组合框,当我从中选择一个值时,我想查询一个ArcGIS地图服务来填充第二个。
出于测试目的,我将第一个组合框值默认为选项,查询用于填充第二个组合框。但是,当我更改第一个组合框时,我为第二个组合框设置商店时出错。
请原谅代码的丑陋。我现在正在“工作”,当我学到更多东西时,我会把它清理干净。
function startCat(results) {
var items=[];
var features = results.features;
features.forEach(function(feature) {
cat = feature.attributes.CATEGORY;
items.push({name:cat});
});
var data = {
label: 'name',
items: items
};
var store = new ItemFileReadStore({data:data});
// create combobox
var comboBox = new ComboBox({
id: "catSelect",
name: "Category",
value: "LCC",
store: store,
onChange: changeCat,
}, "catSelect").startup();
// SUBCategory combo box fill with query
var subcatqueryTask = new QueryTask("http://sroarcgis.ducks.org/ducksunlimited/rest/services/WSITable/MapServer/4");
var subcatquery = new Query();
subcatquery.returnGeometry = false;
subcatquery.outFields = ["SUBCATEGORY"];
subcatquery.where = "CATEGORY = '" + dom.byId("catSelect").value + "'";
subcatqueryTask.execute(subcatquery, startSubCat);
}
function changeCat(){
// SUBCategory combo box fill with query
var subcatqueryTask = new QueryTask("http://sroarcgis.ducks.org/ducksunlimited/rest/services/WSITable/MapServer/4");
var subcatquery = new Query();
subcatquery.returnGeometry = false;
subcatquery.outFields = ["SUBCATEGORY"];
subcatquery.where = "CATEGORY = '" + dom.byId("catSelect").value + "'";
//domConstruct.destroy("subcatSelect");
subcatqueryTask.execute(subcatquery, startSubCat);
}
function changeSubCat(results) {
var items=[];
var features = results.features;
features.forEach(function(feature) {
cat = feature.attributes.SUBCATEGORY;
items.push({name:cat});
});
var data = {
label: 'name',
items: items
};
var store = new ItemFileReadStore({data:data});
var comboBox = dom.byId("subcatSelect");
comboBox.setStore(store);
}
我正在startCat函数中创建第二个组合框以进行测试。我想把它放在其他地方。
我首先尝试以声明方式创建类别组合框,但除非我在创建框时这样做,否则我无法设置商店。
正如您将在代码中看到的那样,我尝试销毁第二个组合框并重新创建它,但我总是收到subcatSelect已经注册的错误。
最好的方法是什么?是否有一个正确的setStore方法,我没有找到或正在破坏和重新创建组合框更好的方法来做到这一点?如果这是一个更好的方法我怎么能摧毁它?
感谢您的任何意见。
答案 0 :(得分:2)
我很抱歉回答了我自己的问题,但经过两天的讨论并写下问题后,我很快就想到了这个问题。
我更改了其中一个功能来设置商店。我不得不使用dom.registry和setAttribute
function changeSubCat(results) {
var items=[];
var features = results.features;
features.forEach(function(feature) {
cat = feature.attributes.SUBCATEGORY;
items.push({name:cat});
});
var data = {
label: 'name',
items: items
};
var store = new ItemFileReadStore({data:data});
node = registry.byId("subcatSelect");
node.setAttribute("store", store);
}