我创建了一个像这样的模型
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
我如何从该商店获取记录?
最佳答案
store.load()
通过配置的代理将数据加载到 Store 中。这使用代理对代理使用的任何存储后端进行异步调用,自动将检索到的实例添加到存储中,并在需要时调用可选回调。但是,该方法会在获取数据之前返回。因此,回调函数用于执行操作存储中新数据的逻辑。
尝试一下,
detailsStore.load({
callback: function(records, operation, success) {
var detailsRecord = detailsStore.last();
},
scope: this
});
关于javascript - Sencha touch store - 幻影数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212213/