2013-08-06 49 views
1

我搜索了,我可以看到這已被問了好幾次,但我甚至無法弄清楚如何對數據做一個簡單的console.log從sencha數據存儲顯示JSON

我的店:

Ext.define('AventosPlanningTool.store.Aventos', { 
    extend:'Ext.data.Store', 

    config: 
    { 
    model:'AventosPlanningTool.model.Aventos', 
    proxy: 
    { 
     type:'ajax', 
     url:'resources/json/frames.json', 
     reader: 
     { 
     type:'json', 
     rootProperty:'options' 
     } 
    }, 
    autoLoad: true 
    } 
}); 

我可以在JSON文件中加載了我的網絡選項卡上看到的。在這一點上我無法弄清楚如何處理它。在數據存儲中,我已將模型設置爲AventosPlanningTool.model.Aventos,這是以下文件。

Ext.define('AventosPlanningTool.model.Aventos', { 
    extend:'Ext.data.Model', 
    xtype:'AventosModel', 

    config: 
    { 
    fields: [ 
     'name', 
     'image' 
    ] 
    } 
}); 

我的JSON現在的問題是非常簡單的:

{ 
    "name": "Cabinet Type", 
    "options": [ 
    { 
     "name": "Face Frame", 
     "image": "resources/images/aventos/frames/faceframe.png" 
    }, 
    { 
     "name": "Panel", 
     "image": "resources/images/aventos/frames/panel.png" 
    } 
    ] 
} 

即使我可以對將是非常有益的數據做一個console.log。我無法弄清楚如何使用這些數據。我在文檔中檢查了兩個指南:http://docs-origin.sencha.com/touch/2.2.1/#!/guide/modelshttp://docs-origin.sencha.com/touch/2.2.1/#!/guide/stores,我無法掌握它

+0

我真的不明白你的問題是什麼。你說數據加載,那麼問題是什麼? –

+0

我不知道如何使用它的數據加載後,我不知道如何顯示它,甚至只是一個簡單的'console.log' – Ronnie

+0

「使用」如何?你是否將它綁定到列表中?一個看法? –

回答

1

添加負載監聽到你的店:

Ext.define('AventosPlanningTool.store.Aventos', { 
    extend:'Ext.data.Store', 

    config: { 
     model:'AventosPlanningTool.model.Aventos', 
     proxy: { 
      type:'ajax', 
      url:'resources/json/frames.json', 
      reader: { 
       type:'json', 
       rootProperty:'options' 
      } 
     }, 
     autoLoad: true, 

     listeners: { 
      load: function(st, g, s, o, opts) { 
       st.each(function(record) { 
        console.log(record.get('name') + ' - ' + record.get('image')); 
       }); 
      } 
    } 
}); 
+0

它是!這回答了我的原始問題,謝謝。我可以告訴'st'意味着商店和'opts'意味着選項,但是什麼是'g','s'和'o'? – Ronnie

+0

記錄,成功和操作如下:http://docs.sencha.com/touch/2.2.1/#!/api/Ext.data.Store-event-load –

0

查看數據存儲的API文檔。請注意,您只能在商店加載後才能訪問數據。例如:

store.load(); 
store.getAt(0) // null, the store load hasn't completed yet. 

你也可以遍歷在使用each方法商店的每個記錄。您可以使用getAt

store.each(function(rec) { 
    console.log(rec.get('name'), rec.get('image')); 
}); 

console.log(store.getAt(0).get('name')); 

常在一個特定的指數獲得了創紀錄的時候,你會商店綁定到一個列表中,有大量的API文檔這樣的例子。

+0

我怎麼知道數據何時加載,因爲我正在使用'autoload',而且我沒有將數據綁定到任何特定的東西上 – Ronnie

0

我想你錯過的是聽商店上的'加載'事件。

store.on('load', function(thisStore, records) { 
    console.log(records[0].get('name')); 
}) 
1

在sencha中,數據在模型中定義,實際上存儲在商店中。您可以通過代理加載您的JSON。將模型視爲來自sql和store的表作爲表中的實際數據。現在,如果您想從商店獲取數據並對其執行操作,則必須加載商店。要將數據提取到列表中,可以使用xtype定義一個列表:'list'指定您的商店商店:'yourStoreName'並提供一個用於顯示該數據的模板。這裏有一個關於我想說的話的非常詳細的解釋。

http://docs-origin.sencha.com/touch/2.2.1/#!/api/Ext.data.Store 也這樣: http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-2/

+0

您的解釋真的有很大的幫助,所以謝謝。 – Ronnie