Extjs Grid - переменная хранения обратного вызова на панели инструментов pagingtoolbar

Я инициализирую переменную хранения в 'initComponent' панели сетки, например

    initComponent: function() {
        var store = Ext.create('Ext.data.Store', {
            model: 'MyDataObject',
            pageSize:_end,
            proxy: {
                 type: 'ajax',
                 url: myurl,
                 reader: {
                    type: 'json',
                    totalProperty: 'total', // total data, see json output
                    root: 'results'    // see json output                   
                 }
             }
        });
        this.store = store;
        this.callParent(arguments);
        this.store.load({params:{start:_star, limit:_end}
    });

Я вызываю store в pagingtoolbar, например

dockedItems: [
        {
            xtype: 'pagingtoolbar',
            dock: 'bottom',
            store: this.store,
            pageSize: _end,
            displayInfo: true,
            displayMsg: 'Displaying results {0} - {1} of {2}',
            emptyMsg: 'No results'
        }
]

В моей панели сетки все еще есть данные, но внизу отображается «нет результатов», например введите описание изображения здесь

Я думаю, проблема в магазине: this.store. Как я могу заставить его работать спасибо.


person DeLe    schedule 17.06.2013    source источник


Ответы (3)


Вы можете определить магазин следующим образом

Ext.define('MyApp.store.MyDataStore', {
        extend: 'Ext.data.Store',
        model: 'MyDataObject',
        storeId: 'myStoreId',
        pageSize:_end,
        proxy: {
             type: 'ajax',
             url: myurl,
             reader: {
                type: 'json',
                totalProperty: 'total', // total data, see json output
                root: 'results'    // see json output                   
             }
         }
    });

а затем назначьте myStoreId конфигурации хранилища как панели сетки, так и панели инструментов подкачки, а структура (StoreManager) должна создать одно хранилище, которое назначено обоим.

Затем вы можете либо установить autoload=true в своем магазине, либо создать новый магазин в initComponent вашей сетки и выполнить загрузку вручную.

person Christoph    schedule 17.06.2013

Я столкнулся с этой незнакомой проблемой вчера, прежде чем я решил эту проблему, я думаю, что состояние не было синхронизацией хранилищ как в сетке, так и в панели подкачки, я потратил много времени на отладку этой проблемы с помощью Firebug, другими словами, хранилища не одно и то же, это просто один и тот же экземпляр хранилища, поэтому вы можете решить эту проблему двумя способами: первый - создать глобальную переменную хранилища, оба они могут поделиться ею, второй - использовать метод bindStore. например, поддержка у вас есть расширение сетки, как показано ниже

this.on('afterrender',function(){//this  is grid itself
        this.getBottomToolbar().bindStore(this.store)//set store of paggingtoolbar
    },this);
person luma    schedule 06.09.2013

Я нашел решение здесь сетка удаленного пейджинга в extjs и код должен выглядеть так:

        this.store = store;
        this.dockedItems = [{
           xtype: 'pagingtoolbar',
           store: this.store,
           displayMsg: 'Displaying results {0} - {1} of {2}',
           emptyMsg: 'No results',
           dock: 'bottom',
           displayInfo: true,
           pageSize: 22
        }];

        this.callParent(arguments);
        this.store.load({params:{start:0, limit:22}});
person DeLe    schedule 17.06.2013