【问题标题】:Display JSON from sencha data store显示来自 sencha 数据存储的 JSON
【发布时间】:2013-08-08 04:04:29
【问题描述】:

我已经搜索过,我发现这个问题已经被问了好几次了,但我什至不知道如何在数据上做一个简单的console.log

我的商店:

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,但我无法掌握它

【问题讨论】:

  • 我不太明白你的问题是什么。你说数据加载,那是什么问题?
  • 数据加载后不知道怎么使用,不知道怎么显示甚至只是一个简单的console.log
  • “使用”如何?您是否将其绑定到列表?一个视图?
  • 嗯,json 是一个标题和一个图像,所以我认为一旦我能弄清楚如何访问数据,它将是一个自定义的“视图”
  • 你还没有得到你想要的答案?

标签: javascript extjs sencha-touch sencha-touch-2


【解决方案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'));
                });
            }
    }
});

【讨论】:

【解决方案2】:

在 sencha 中,数据在模型中定义,并实际存储在存储中。您可以通过代理加载 JSON。将模型视为 sql 中的表,将存储视为表中的实际数据。现在,如果您想从存储中获取数据并对其执行操作,则必须加载存储。要将数据提取到列表中,请使用 xtype:'list' 定义列表,指定您的商店 store:'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/

【讨论】:

    【解决方案3】:

    我认为您缺少的是在商店中侦听“加载”事件。

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

    【讨论】:

      【解决方案4】:

      查看数据存储的 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 文档中有很多这样的示例。

      【讨论】:

      • 我如何知道数据何时加载,因为我使用的是autoload,而且我还没有将数据绑定到任何特定的东西
      猜你喜欢
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 2021-12-03
      • 2012-04-14
      • 2015-12-18
      • 2022-01-13
      • 2021-11-28
      相关资源
      最近更新 更多