我创建了一个类似
的模型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如何从该商店获取记录?
答案 0 :(得分:2)
store.load()
通过配置的代理将数据加载到商店中。这使用代理对代理使用的任何存储后端进行异步调用,自动将检索到的实例添加到Store中,并在需要时调用可选的回调。但是,该方法在获取数据之前返回。因此回调函数,用于执行操纵商店中新数据的逻辑。
尝试,
detailsStore.load({
callback: function(records, operation, success) {
var detailsRecord = detailsStore.last();
},
scope: this
});