0

jsonストアを介してデータを取得するグリッドがあります。グリッドの行の総数を表示したい。問題は、ストアがロードされる前にstore.count()関数が実行されているため、0が返されることです。ストアがロードされた後にのみcount関数を実行するにはどうすればよいですか?私はMVCで作業しています。これが、カウントロジックを含むapp.jsです。

助けてくれてありがとう

    Ext.application({
            name: 'AM',
            appFolder: 'app',
            controllers: [
                    'Users'
            ],
            launch: function(){
                  Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));
                  Ext.create('Ext.container.Viewport', {
                            resizable: 'true',
                            forceFit: 'true',
                            layout: 'fit',
                            items:[{
                                    xtype: 'userpanel',
                            }]
                  });
                  var     port = Ext.ComponentQuery.query('viewport')[0],
                          panel = port.down('userpanel'),
                          grid = panel.down('userlist'),
                          label = panel.down('label');
                  var count = grid.store.getCount();
                  var labelText = "Number of people in list: " + count;
                  label.setText(labelText);
            }
    });

ストアコード:

Ext.define('AM.store.Users', {
    extend: 'Ext.data.Store',
    model: 'AM.model.User',
    autoLoad: true,
    autoSync: true,
    purgePageCount: 0,
    proxy: {
            type: 'rest',
            url: 'json.php',
            reader: {
                    type: 'json',
                    root: 'queue',
                    successProperty: 'success'
            }
    },
sortOnLoad: true,
    //autoLoad: true,
    sorters: [
            {
                    property: 'PreReq',
                    direction: 'DESC'
            },
            {
                    property: 'Major1',
                    direction: 'ASC'
            },
            {
                    property: 'UnitsCompleted',
                    direction: 'DESC'
            }
    ],
listeners:{
            onload: function(){
                    var     port = button.up('viewport'),
                            grid = port.down('userlist'),
                            panel = port.down('userpanel'),
                            label = panel.down('label'),
                            count = grid.store.getCount(),
                            labelText = "Number of people in list: " + count;
                    label.setText(labelText);
            },
            scope: this
    }
});

グリッドコード:

Ext.define('AM.view.user.List' , {
    extend: 'Ext.grid.Panel',
    alias: 'widget.userlist',
    store: 'Users',
    height: 'auto',
    width: 'auto',
    //resizable: 'true',
    features:[{
            ftype: 'grouping'
    }],
autoFill: 'true',
    layout: 'fit',
    autoScroll: 'true',
    initComponent: function() {
            function renderTip(value, metaData, record, rowIdx, colIdx, store) {
                    metaData.tdAttr = 'data-qtip="' + value + '"';
                    return value;
            };
            var dateRender = Ext.util.Format.dateRenderer('m/d/Y');
            this.columns=[
                //code for all my columns
            ]
            ];
            this.callParent(arguments);

}
});
4

2 に答える 2

1

ストアにリスナーを配置してから、onloadイベントをリッスンしてカウントを取得し、その方法でフィールドを更新してみてください。これを行う方法はたくさんありますが、それは1つだけです。

ただし、上記の例では、作成したストアをロードすることはありません。そのため、ゼロが表示されます。

于 2012-09-28T18:33:10.873 に答える
0

それを理解し、「onLoad」ではなく「load」イベントのリスナーを追加する必要がありました。以下のコード...

Ext.define('APP.store.Store', {
    extend: 'Ext.data.Store',
    model: 'APP.model.Model',
    autoLoad: true,
    autoSync: true,
    purgePageCount: 0,
    proxy: {
            type: 'rest',
            url: 'json.php',
            reader: {
                    type: 'json',
                    root: 'users',
                    successProperty: 'success'
            }
    },
    sortOnLoad:true,
    sorters: [{
            property: 'last',
            direction: 'ASC'
    }],
    listeners: {
            load:{
                    fn:function(){
                            var label = Ext.ComponentQuery.query('#countlabel')[0];
                            label.setText(this.count()+ ' Total Participants);
                    }
            }
    }
});
于 2013-04-22T23:24:17.483 に答える