2013-08-06 53 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