Dojo ItemFileWriteStore不读取JSON服务器文件

时间:2012-08-02 00:33:04

标签: json dojo

我正在使用Dojo和它的dojo / data / ItemFileWriteStore模块来读取本地服务器上的JSON数据文件。在我的.js文件中我有

var myDataStore = new ItemFileWriteStore({
    url: "app/data/mydata.json",
    handleAs: "json",
    clearOnClose: true,
    urlPreventCache: true
})

这位于我的返回声明函数的postCreate函数中......所以:

 define([
    "dojo/_base/declare",
    "com/cayuse/base/_widget",
    "dojo/text!./templates/myform.html",
    ...    
    "dojo/data/ItemFileWriteStore",
    "dojo/store/DataStore",
    "dojo/store/Observable",
    "dojo/data/ObjectStore",
    "dojo/domReady!"
    ],
    function(declare, widget, template, ..., ItemFileWriteStore, DataStore, 
        Observable, ObjectStore){
        return declare("app.myform", widget, {
            templateString: template,

            postCreate: function(){

                domConstruct.create("link",{
                    type: "text/css",
                    rel: "stylesheet",
                    href: require.toUrl('dojox/form/resources/CheckedMultiSelect.css')
                }, document.getElementsByTagName("head")[0]);

                // data store
                var myDataStore = new ItemFileWriteStore({
                    url: "app/data/mydata.json",
                    handleAs: "json",
                    clearOnClose: true,
                    urlPreventCache: true
                })
                console.log(myDataStore);
            }
        });
    }
);

我可以使用IFWS方法将数据存储访问权限从上面的内容更改为

var myDataStore = dojo.xhrGet({
    url: "app/data/mydata.json",
    handleAs: "json",
    load: function(data, ioArgs){
         console.log(data);
    }
 });

它找到没有问题的文件。

这太奇怪了!关于这里出了什么问题的任何想法?

更新: 这是我正在阅读的文件中的数据。我相信它符合JSON格式。如果没有,请告诉我。 xhrGet读得很好。

{ "identifier": "id",
    "label": "firstName",
    "items":[
     {"id":"0","firstName":"Robert","website":"www.barker.com","email":"robert@barker.com","bday":"1928-08-09","color":"Blue","toolkits":["Dojo","Moo"],"sendEmail":["on"],"format":"HTML"},
     {"id":"1","firstName":"Vanna","website":"www.white.com","email":"vanna@white.com","bday":"1968-07-23","color":"Green","toolkits":["Dojo","jQuery"],"sendEmail":["off"],"format":"Text"}
    ]
}

3 个答案:

答案 0 :(得分:2)

ItemFileWriteStore要求您的数据结构如下:

{ identifier: 'abbr',
  label: 'name',
  items: [
    { abbr:'ec', name:'Ecuador',           capital:'Quito' },
    { abbr:'eg', name:'Egypt',             capital:'Cairo' },
    { abbr:'sv', name:'El Salvador',       capital:'San Salvador' },
    { abbr:'gq', name:'Equatorial Guinea', capital:'Malabo' },
    { abbr:'er', name:'Eritrea',           capital:'Asmara' },
    { abbr:'ee', name:'Estonia',           capital:'Tallinn' },
    { abbr:'et', name:'Ethiopia',          capital:'Addis Ababa' }
]}

那就是'标识符'是你的“ID”字段,'label'是你的“标签”字段,然后是一个名为“items”的数组中的所有对象。

您可以在此处查看in ItemFileWriteStore's documentation。如果您没有像这样构建JSON数据,那么您最终可能会使用IFWS读取文件并且实际上没有读取任何数据。

dojo 1.7中还有其他商店实现,不需要这样的结构,例如: Memory存储您可以与其他文件读取技术结合使用以实现相同目的。

答案 1 :(得分:0)

尝试使用dojo.data.ItemFileReadStore进行阅读 json数据文件,而不是dojo / data / ItemFileWriteStore。

请注意,dojo.data.ItemFileWriteStore用于写入json数据。

答案 2 :(得分:0)

如果您的代码在上面发布时是完全正确的,那么解释器可能不喜欢您从ItemFileWriteStore赋值中省略了分号的事实。尝试添加';'如下:

            // data store
            var myDataStore = new ItemFileWriteStore({
                url: "app/data/mydata.json",
                handleAs: "json",
                clearOnClose: true,
                urlPreventCache: true
            });
            console.log(myDataStore);