2011-04-27 34 views
2

我將以通常的免責聲明開始:新的Sencha Touch /使用JSON,在黑暗中徘徊。任何幫助或刺激正確的方向比你知道的更讚賞!訪問JSON訂閱源中的嵌套對象 - Sencha Touch

我試圖讓我的應用程序從公開的Google Spreadsheet JSON提要中獲取數據。從我設法弄清楚,我目前的模型是基於JSON數組,而不是嵌套對象。我如何訪問並返回嵌套對象?

Ext.regModel('Count', { 
    fields: [{name:'$t'}] 

}); 

this.list = new Ext.List({ 
      itemTpl: new Ext.XTemplate('<div>{$t}</div>'), 
      loadingText: false, 
      store: new Ext.data.Store({ 
       model: 'Count', 
       proxy: { 
        type: 'scripttag', 
        url : 'http://spreadsheets.google.com/feeds/cells/0AuYDRk91MX8-dHhkV29ZVkRGNjlvZjV4QVBIVmJubVE/odb/public/basic?range=A1&alt=json', 
        reader: { 
         type: 'json', 
         root: 'feed' 
        } 
       } 
      }) 
     }); 

的JSON數據(多餘的東西去掉,上面的鏈接將顯示所有的它,如果需要的話,包含電子郵件地址,我寧願不發佈,並已編入索引):

{ 
    "feed":{ 
     "entry":[{ 
      "content":{ 
       "type":"text", 
       "$t":"11" 
      } 
     }] 
    } 
} 

如果我在使用數組的另一個JSON提要中使用plop,我可以使用它很好,但只是無法弄清楚我需要做什麼來訪問對應於$ t的對象中的整數。如果我將「入口」作爲根而不是「feed」,則會出現一個錯誤消息:「Uncaught TypeError:無法讀取未定義的屬性'長度'。」

+0

嘗試類似:'根:「feed.entry'' - 應該讓你一步一步地接近你想要什麼。 – nelstrom 2011-04-27 07:01:41

+0

@nelstrom謝謝!這讓我略微接近。現在,我的列表生成一個列表項(這很有道理,JSON提要只能得到一個結果),但我仍然無法訪問$ t對象內容。我更新的regModel如下:'Ext.regModel('Count',{{name:'$ t',mapping:'content。$ t'}] });' – Kate 2011-04-27 16:25:26

+0

@nelstrom其實,我有它工作!事實證明,列表項模板不像$ {t}變量中的美元符號。一旦我將它和模型切換到任意名稱的映射,它就開始工作了! 'Ext.regModel('Count',{fields:[{name:'count',mapping:'content。$ t'}]});' – Kate 2011-04-27 16:36:42

回答

4

解決方案!原來Sencha不喜歡我的模板變量中的$。

Ext.regModel('Count', { 
    fields: [{name:'count', mapping:'content.$t'}] 

}); 

this.list = new Ext.List({ 
      itemTpl: new Ext.XTemplate('<div>{count}</div>'), 
      loadingText: false, 
      store: new Ext.data.Store({ 
       model: 'Count', 
       proxy: { 
        type: 'scripttag', 
        url : 'http://spreadsheets.google.com/feeds/cells/0AuYDRk91MX8-dHhkV29ZVkRGNjlvZjV4QVBIVmJubVE/odb/public/basic?range=A1&alt=json', 
        reader: { 
         type: 'json', 
         root: 'feed.entry' 
        } 
       } 
      }) 
     });