使用DOJO将数据从JSON填充到选择框中

时间:2013-02-01 11:32:17

标签: dojo

我正在加载JSON数据并将其填充到选择标记

我正在使用DOJO,我必须使用dojo,

请告诉我有什么问题

我面临的问题是,在JSON中,GetStatesResult用于声明数组 但它不起作用,仅当我使用项目代替GetStatesResult

时才有效
dojo.ready(function() {
                    var stateStore = new dojo.data.ItemFileReadStore({
                        url : "http://localhost:8080/MobilePro/states.json"
                    });
                    function completed(GetStatesResult) {
                        var ref = dom.byId("stateSelect");
                        for ( var i = 0; i < GetStatesResult.length; i++) {
                            var node = domConstruct.create("option", {value: stateStore.getValue(GetStatesResult[i], "Value"), label: stateStore.getValue(GetStatesResult[i], "Desc")});
                            domConstruct.place(node, ref, "last");
                        }
                    }
                    function error(errData, request) {
                        console.log("Failed in loading data.");
                    }
                    stateStore.fetch({
                        onComplete : completed,
                        onError : error
                    });
                });

这是JSON

{
    "GetStatesResult": [
        {
            "Desc": "--Select--",
            "Value": "-1"
        },
        {
            "Desc": "Alaska",
            "Value": "AK"
        },
        {
            "Desc": "Alabama",
            "Value": "AL"
        },
        {
            "Desc": "Arkansas",
            "Value": "AR"
        },
        {
            "Desc": "Arizona",
            "Value": "AZ"
        }

    ]
}

1 个答案:

答案 0 :(得分:0)

ItemFileReadStore要求项目列表位于名为“items”的属性中。它的源代码硬编码:

this._arrayOfTopLevelItems = dataObject.items;

如果您只使用ItemFileReadStore来获取项目,为什么不使用dojo.xhrGet()?如果你真的想使用ItemFileReadStore,用户dojo.xhrGet()来检索数据,以正确的格式(使用items属性),然后使用data属性将其传递给ItemFileReadStore构造函数。类似的东西:

dojo.xhrGet({ url: "whatever", success: function(response) {
   var data = {items: response.GetStatesResult};
   var stateStore = new dojo.data.ItemFileReadStore({ data: data});
});