设置为json数据存储区时,数据源不会出现在dijit中

时间:2014-06-23 15:20:33

标签: json dojo

我正在尝试将我的dijit Select数据源设置为json格式的数据存储区,但只有框出现在我的下拉列表中 - 而不是来自数据存储区的文本。数据存储从数据库中提取,格式为:

{
    "GetReachesResult":[
        {
            "reach":"CRC"
        },
        {
            "reach":"IV"
        },
        {
            "reach":"IVA"
        },
        {
            "reach":"IVB"
        },
        {
            "reach":"IVD"
        },
        {
            "reach":"IVE"
        },
        {
            "reach":"V"
        }
    ]
}

尝试为下拉列表设置商店的代码模块是:

define(['dojo/store/Memory', 'dojo/_base/xhr', "dojo/data/ObjectStore"],
//functions to get data and fill data stores
function (Memory, xhr, ObjectStore) {
    return {
        GetReaches: function (url) {
            xhr.get({//get data from database
                url: url,
                //url: url,
                handleAs: "json",
                load: function (result) {
                    var ReachData = result.GetReachesResult; //GetReachesResult is default reach of GetReaches Method
                    var ReachStore = new Memory({ data: ReachData });
                    var oReachStore = new ObjectStore({ objectStore: ReachStore });
                    DD.setStore(oReachStore);
                },
                error: function (err) { }

            });
        } //GetReaches
    }
});

从主页面到模块的调用是:

....
        DD = new Select({
            style: { width: '250px' }
        }, "DropDownDiv");
        DD.startup();
        var myButton = new Button({
            label: "Get Data",
            onClick: function () {
                Data.GetReaches(dataServiceUrl);
            }
        }, "ButtonDiv");

});

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:1)

问题是我的json数据 - 选择显示我需要将对象属性名称从'reach'更改为'label'所需的数据。我猜Select只显示名称标签为

的属性

答案 1 :(得分:1)

我注意到您通过将reach属性更改为label来解决了您的错误。但是,您可以使用labelAttr属性配置用于标签的属性,例如:

DD = new Select({
    style: { width: '250px' },
    labelAttr: 'reach'
}, "DropDownDiv");

这应该也可以正常工作,正如你在JSFiddle中看到的那样:http://jsfiddle.net/5JKx6/

了解这些属性的最佳方法是查看API documentation