我一开始就与ext js 4叠加。我试图在使用商店启动应用程序时获取当前用户数据。但我没有从商店获得任何数据,甚至store.count返回0。
我发现了许多描述如何创建商店,但没有找到如何访问其中的数据。
我设法使用Ext ajax请求获取数据,但我认为使用商店会更好,我不能避免它们。< / p>
我的模特:
Ext.define('MyApp.model.User', {
extend: 'Ext.data.Model',
fields: [
'id',
'username',
'email'
]
});
我的商店看起来像:
Ext.define('MyApp.store.User.CurrentUser', {
extend: 'Ext.data.Store',
requires: 'MyApp.model.User',
model: 'MyApp.model.User',
autoLoad: true,
proxy: {
type: 'ajax',
method: 'POST',
url: Routing.generate('admin_profile'),
reader: {
type: 'json',
root: 'user'
}
}
});
返回的json:
{
"success":true,
"user":[{
"id":1,
"username":"r00t",
"email":"root@root.root"
}]
}
申请表:
Ext.application({
name: 'MyApp',
appFolder: '/bundles/myadmin/js/app',
models: ['MyApp.model.User'],
stores: ['MyApp.store.User.CurrentUser'],
//autoCreateViewport: true,
launch: function() {
var currentUser=Ext.create('MyApp.store.User.CurrentUser',{});
/*
Ext.Ajax.request({
url : Routing.generate('admin_profile'),
method: 'POST',
success: function(resp) {
var options = Ext.decode(resp.responseText).user;
Ext.each(options, function(op) {
var user = Ext.create('MyApp.model.User',{id: op.id,username:op.username,email:op.email});
setUser(user);
}
)}
});
*/
currentUser.load();
alert(currentUser.count());
}
});
答案 0 :(得分:5)
问题本身并不是商店不包含数据,问题是商店负载是异步的,因此当您计算商店记录时,商店实际上是空的。 要“修复”此问题,请使用商店加载的回调方法。
currentUser.load({
scope : this,
callback: function(records, operation, success) {
//here the store has been loaded so you can use what functions you like
currentUser.count();
}
});
答案 1 :(得分:0)
所有的sencha示例都在商店中有代理,但您实际上应该将代理放在模型中,以便您可以使用model.load方法。商店继承了模型的代理,它都按预期工作。
它看起来像model.load硬编码id(而不是使用idProperty),并且它总是必须是一个int,据我所知。
祝你好运!