如何从extjs 4商店获取数据

时间:2011-12-03 10:34:35

标签: javascript extjs extjs4

我一开始就与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());
    }
});

2 个答案:

答案 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,据我所知。

祝你好运!