2012-08-02 50 views
1

我使用Dojo和它的道場/數據/ ItemFileWriteStore模塊讀取我的本地服務器上的JSON數據文件。在我的js文件我有道場ItemFileWriteStore不讀JSON服務器文件

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":"[email protected]","bday":"1928-08-09","color":"Blue","toolkits":["Dojo","Moo"],"sendEmail":["on"],"format":"HTML"}, 
    {"id":"1","firstName":"Vanna","website":"www.white.com","email":"[email protected]","bday":"1968-07-23","color":"Green","toolkits":["Dojo","jQuery"],"sendEmail":["off"],"format":"Text"} 
    ] 
} 

回答

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」字段,「標籤」是你的「標籤」字段,然後所有的一個名爲「items」的數組內的對象。

你可以檢查出來這裏in ItemFileWriteStore's documentation。如果您沒有像這樣構建的JSON數據,那麼您可能最終會用IFWS讀取文件,而實際上不會讀取任何數據。

dojo 1.7中還有其他的商店實現不需要這樣的結構,例如, Memory保存您可以結合其他文件讀取技術來實現相同。

+0

感謝您的響應eburgos。我應該發佈我的文件數據。它符合那個結構。我會將其添加到我的帖子中。 讓我感到困惑的一件事是,我在這個論壇上看到一些表明屬性和值都必須引用真正的JSON格式。我試過兩種方法,但我的問題是該文件沒有被抓取。我在Net XHR活動中查看Firebug,並且從未觸摸過該文件。另外,當我使用dojo xhrGet時,它讀取相同的文件就好了。這真的很奇怪,我有這個問題。 – teaman 2012-08-02 17:46:38

+0

因此,當Firebug Net XHR活動沒有請求? – eburgos 2012-08-05 01:40:42

0

嘗試使用dojo.data.ItemFileReadStore讀取 json數據文件,而不是dojo/data/ItemFileWriteStore。

注意dojo.data.ItemFileWriteStore用於書面方式JSON數據。

+0

我以爲ItemFileWriteStore也包含ItemFileReadStore的功能嗎?如果你是正確的並且有所作爲,那麼具有IFWS子集的對象起作用而不是IFWS本身就很奇怪。 – teaman 2013-01-03 22:54:02

0

如果你的代碼是完全按照自己的貼吧上面,然後解釋可能不喜歡你從ItemFileWriteStore分配省略了分號的事實。嘗試添加';'如下:

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