如何设置dojo组合框存储

时间:2014-07-22 15:41:43

标签: javascript dojo arcgis

我正在开发一个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方法,我没有找到或正在破坏和重新创建组合框更好的方法来做到这一点?如果这是一个更好的方法我怎么能摧毁它?

感谢您的任何意见。

1 个答案:

答案 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);
}