最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to get data from extjs 4 store - Stack Overflow

programmeradmin1浏览0评论

Im stack with ext js 4 at the very beginning. Im trying to get the current user data when starting the application using store. But Im not getting any data from the store, even the store.count return 0. I found many description how to create store, but not how to access the data in it.
I managed to get the data using Ext ajax request, but i think would be better using store and i cant avoid them..

My model:

Ext.define('MyApp.model.User', {
   extend: 'Ext.data.Model',
   fields: [ 
        'id',
        'username',
        'email'
    ]
});

My store looks like:

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'
        }
    }
});

The returned json:

{
    "success":true,
    "user":[{
        "id":1,
        "username":"r00t",
        "email":"[email protected]"
    }]
}

And the application:

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());
    }
});

Im stack with ext js 4 at the very beginning. Im trying to get the current user data when starting the application using store. But Im not getting any data from the store, even the store.count return 0. I found many description how to create store, but not how to access the data in it.
I managed to get the data using Ext ajax request, but i think would be better using store and i cant avoid them..

My model:

Ext.define('MyApp.model.User', {
   extend: 'Ext.data.Model',
   fields: [ 
        'id',
        'username',
        'email'
    ]
});

My store looks like:

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'
        }
    }
});

The returned json:

{
    "success":true,
    "user":[{
        "id":1,
        "username":"r00t",
        "email":"[email protected]"
    }]
}

And the application:

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());
    }
});
Share Improve this question edited Dec 3, 2011 at 12:19 user1063963 asked Dec 3, 2011 at 10:34 user1063963user1063963 1,3756 gold badges22 silver badges34 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 5

The problem itself isn't that the store does not contain data, the problem is that the store load is asyncronous therefore when you count the store records, the store is actualy empty. To 'fix' this, use the callback method of the store load.

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();
    }
});

All the sencha examples have the proxies in the store, but you should actually put the proxy in the model, so that you can use the model.load method. the store inherits the model's proxy, and it all works as expected.

it looks like model.load hardcodes the id though (instead of using idProperty), and it always has to be an int, as far as I can tell.

good luck!

发布评论

评论列表(0)

  1. 暂无评论