2012-04-24 18 views
1

我試圖將一個特定的json文件加載到列表視圖中;但sencha代理似乎不瞭解「CurrencyName」和「Value」的密鑰對。我對如何將這兩個值關聯到可用數據毫無頭緒。閱讀json與鍵:sencha touch中的ext.store中的值2

這裏的JSON:

{ 
    "timestamp": 1335294053, 
    "base": "USD", 
    "rates": { 
     "AED": 3.6732, 
     "AFN": 48.32, 
     "ALL": 106.040001 
    } 
} 

我的商店:

proxy: { 
    type: 'ajax', 
    url: 'http://localhost/CurrencyFX/latest.json', 
    reader: { 
     type: 'json', 
     rootProperty: 'rates' 
    } 
}, 

我的模型:

Ext.define('CurrencyFX.model.Currency', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [ 'name', 'value' ] 
    } 
}); 

回答

4

你需要編寫自己的JSON讀者子類來完成這項工作,因爲你正在處理的數據不是數組。

謝天謝地,這樣做很簡單。這是應該做的工作:

Ext.define('Ext.data.reader.Custom', { 
    extend: 'Ext.data.reader.Json', 
    alias : 'reader.custom', 

    getRoot: function(data) { 
     if (this.rootAccessor) { 
      data = this.rootAccessor.call(this, data); 
     } 

     var values = [], 
      name; 

     for (name in data) { 
      values.push({ 
       name: name, 
       value: data[name] 
      }); 
     } 

     return values; 
    } 
}); 

將與下面的存儲配置工作:

var store = Ext.create('Ext.data.Store', { 
    fields: ['name', 'value'], 
    autoLoad: true, 
    proxy: { 
     type: 'ajax', 
     url: '0000.json', 
     reader: { 
      type: 'custom', 
      rootProperty: 'rates' 
     } 
    } 
}); 

通知讀者type現在定製

我在本地測試了這個數據,它似乎工作得很好。

+0

非常好!奇蹟般有效 !非常感謝你 ! – Disco 2012-04-25 10:43:51