Sencha触摸商店 - 幻影数据

时间:2013-01-08 09:49:04

标签: javascript google-chrome sencha-touch store

我创建了一个类似

的模型
Ext.define('MyApp.model.ContainerDetailsModel', {
extend: 'Ext.data.Model',
alias: 'model.ContainerDetailsModel',
config: {
    fields: [
        {
            name: 'id',
            allowNull: false,
            type: 'string'
        },
        {
            name: 'container_types_id',
            type: 'string'
        }
    ]
  }
});

和这样的商店

Ext.define('MyApp.store.ContainerDetailsStore', {
extend: 'Ext.data.Store',

requires: [
    'MyApp.model.ContainerDetailsModel'
],

config: {
    model: 'MyApp.model.ContainerDetailsModel',
    storeId: 'ContainerDetailsStore',
    proxy: {
        type: 'ajax',
        enablePagingParams: false,
        url: 'hereIsServiceUrl',
        reader: {
            type: 'json'
        }
    }
}
});

现在应用程序的某个地方,我试图获得一条记录,如:

var detailsStore = Ext.getStore("ContainerDetailsStore");
detailsStore.load();
var detailsRecord = detailsStore.last();

但它让我不确定。服务返回的json是好的,它在不同的地方使用它作为列表的源。我已经尝试将allowNull更改为true,但源中没有null id。我尝试将类型设置为'int',结果相同。

所以我试过了

console.log(detailsStore);

结果就像这样(只是重要的值):

Class {
...
loaded: true,
data: Class {
   ...
   all: Array[1] {
       length: 1,
       0: Class {
           container_types_id: "1",
           id: "726",
           ....
       }
   ...
   }
   ...
},
...
}

在同一个地方

 console.log(detailsStore.data);

返回(应该):

 Class {
   ...
   all: Array[1] {
       length: 1,
       0: Class {
           container_types_id: "1",
           id: "726",
           ....
       }
   ...
   }

但是(下一行)

console.log(detailsStore.data.all);

返回

 []

它是空阵列。当我尝试从商店的任何方法,它说商店是空的。 我一个接一个地写了console.log()行 - 所以肯定它们之间没有变化(我也以不同的顺序或组合尝试)。

我的浏览器是Google Chrome 23.0.1271.97 m 我使用来自https://extjs.cachefly.net/touch/sencha-touch-2.0.1.1/sencha-touch-all-debug.js

的Sencha

如何从该商店获取记录?

1 个答案:

答案 0 :(得分:2)

store.load()通过配置的代理将数据加载到商店中。这使用代理对代理使用的任何存储后端进行异步调用,自动将检索到的实例添加到Store中,并在需要时调用可选的回调。但是,该方法在获取数据之前返回。因此回调函数,用于执行操纵商店中新数据的逻辑。 尝试,

detailsStore.load({
    callback: function(records, operation, success) {
    var detailsRecord = detailsStore.last();
    },
    scope: this
});