使用dojo.xhrGet重新使用json文件在dijit中填充combobox

时间:2012-05-08 05:18:52

标签: dojo

我正在做道场,我是一个初学者。好吧,我想创建一个使用ajax(dojo.xhrGet)从json文件中恢复的数据创建一个dojo ItemFileReadStore,它可以用来填充组合框。我尝试过它,但没有成功!任何人都可以指导我如何调用json文件,然后使用数据填充组合框!

var _getPlacetypes = function(){
        dojo.xhrGet({
            url: "place_types.json",
            handleAs: "json",
            timeout: 5000,
            load: function(response, args) {
                console.log(response);

            },
            error: function(error_msg,details) {
                PropertyMap.handleError(error_msg, details);
            }
        });
    }

    var myStore = new dojo.data.ItemFileReadStore({
        jsId:data,
        url: "place_types.json",
        });

我正在使用这样的东西!这是正确的方式吗?

谢谢

问候!

2 个答案:

答案 0 :(得分:2)

首先定义数据的结构。

var myData = { identifier: 'id', label: 'My Label', items: [] };

identifier必须唯一标识每一行。

您必须使用ItemFileWriteStore(而不是ItemFileReadStore),因为您想使用来自ajax的响应来填充它。

var myStore = new dojo.data.ItemFileWriteStore({data: myData});

假设response是包含someList的json,其中包含id的对象, 在load: -

中执行此操作
load: function(response, args) {
    dojo.forEach(response.someList, 
        function(oneItem, i) {
        myStore.newItem({oneItem.id : oneItem.id});
    });

    myStore.save();
}

这样您就可以从json响应中填充数据存储。

创建ComboBox时,您应该将商店设为myStore

var comboBox = new ComboBox({
        id: "stateSelect",
        store: myStore,
    }, "stateSelect");

答案 1 :(得分:0)

为什么不使用JsonRestStore来简化代码?

您可能有理由直接使用xhrGet,但我想如果不是您会发现JsonRestStore是您工作中的重要资产