1

私は Dojo を使用しています。それは dojo/data/ItemFileWriteStore モジュールで、ローカル サーバー上の JSON データ ファイルを読み取ります。私の.jsファイルには

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

これは、私の return 宣言関数の 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"}
    ]
}
4

3 に答える 3

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」フィールドである「識別子」、「ラベル」フィールドである「ラベル」、および「アイテム」と呼ばれる配列内のすべてのオブジェクトです。

こちらの ItemFileWriteStore's documentation で確認できます。JSON データがそのように構造化されていない場合、IFWS でファイルを読み取り、実際にはデータを読み取らない可能性があります。

Dojo 1.7 には、そのような構造を必要としないストアの実装が他にもあります。例えば、同じことを達成するために他のファイル読み取り技術と組み合わせることができるメモリーストアがあります。

于 2012-08-02T17:19:26.440 に答える
0

コードが上に投稿したとおりである場合、インタープリターは、ItemFileWriteStore 割り当てからセミコロンを省略したという事実を好まない可能性があります。「;」を追加してみてください 以下のように:

            // data store
            var myDataStore = new ItemFileWriteStore({
                url: "app/data/mydata.json",
                handleAs: "json",
                clearOnClose: true,
                urlPreventCache: true
            });
            console.log(myDataStore);
于 2015-02-09T21:16:48.073 に答える
0

dojo/data/ItemFileWriteStore の代わりに、json データ ファイルの読み取りに dojo.data.ItemFileReadStore を使用してみてください。

json データの書き込みには dojo.data.ItemFileWriteStore が使用されることに注意してください。

于 2013-01-02T17:57:20.903 に答える