Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   PagingToolbar и поиск (https://javascript.ru/forum/extjs/12740-pagingtoolbar-i-poisk.html)

DenQ 31.10.2010 19:56

PagingToolbar и поиск
 
Всем доброго времени суток.
Я с очередным вопросом...
У меня есть грид, в нем есть постраничная навигация, и я даже поиск реализовал уже, но вот проблема в том что поиск работает корректно до той поры пока я не нажму кнопку для просмотра следующей страницы... если это сделать, то теряются настройки поиска(необходимые параметры в запросе сторы отсутствуют).... и грид отображает не отфильтрованную информацию... хотя по результатам поиска найдено 4 страницы(с учетом настроек лимитов).
В общем не знаю как объяснил.
Был бы рад вашим примерам, или советам.
Ниже приводится листинг. Если что извиняюсь за большие размеры. :)

function gUsers(){
    var storeUsers = getStore('users');
//    var str = null;
    function sendForFind(b, e) {
        var str = field.getValue();
        storeUsers.reload(
            {params: {
                    start   : 0,
                    limit   : 5,
                    text    : str,
                    combo   : comboList.getValue(),
                    box     : checkBox
                    }
            }
        );
    }

    var checkBox = false;
    var CheckBox = new Ext.form.Checkbox( {
        id      : '001',
        title   : 'box',
        listeners:{
            check: function() {
                (checkBox == true) ? (checkBox = false) : (checkBox = true);
            },
            specialkey: function (a, e) {
                if(e.getKey() == e.ENTER) {
                    sendForFind();
                }
            }
        }
    })

    var massList = [
            ['name', 'Имя'],
            ['email', 'Почта'],
            ['code', 'Код']
        ];

       var listStore = new Ext.data.ArrayStore( {
            data            : massList,
            autoLoad        : true,
            fields: [
               {
                   name     : 'val',
                   type     : 'string'
               }, {
                   name     : 'txt',
                   type     : 'string'
               }
            ]
        });

    var comboList = new Ext.form.ComboBox( {
        value           : 'name',
        store           : listStore,
//        readOnly        : true,
        displayField    : 'txt',
        valueField      : 'val',
        width           : 100,
        mode            : 'local',
        triggerAction   : 'all',
        listeners: {
            select:function() {
//                    comboList.setValue('txt');
            },
            specialkey: function (a, e) {
                if(e.getKey() == e.ENTER) {
                    sendForFind();
                }
            }
        }
    });

    var field   = new Ext.form.TextField({
        fieldLabel  : 'Short name',
        width       : 250,
        name        : 'fielset',
        listeners: {
            specialkey: function (a, e) {
                if(e.getKey() == e.ENTER) {
                    sendForFind();
                }
            }
        }
    });
    var button  = new Ext.Button( {
        text        : '<b>Найти</b>',
        name        : 'button_search',
        handler     : sendForFind,
        listeners: {
            click: function(){
//                buttonDown = true;
//                    alert('');
            }
        }

    });

    var gridUsers = new Ext.grid.GridPanel({
        title       : 'Пользователи',
        trackMouseOver:false,
        disableSelection:true,
        loadMask: true,
//        height      : 400,
        autoHeight  : true,
        width       : 800,
        store       : storeUsers,
//        store       : buttonDown == true ? getStore('users', true) : storeUsers,
//        deferredReander   : false,
        listeners: {
            celldblclick: function (G, row, column, e) {
                    win(formUsersRe(G.getStore().getAt(row)));
//                    Ext.Msg.alert('Info', G.getStore().getAt(row).get('name'));
                }
        },
        bbar: new Ext.PagingToolbar( {
            pageSize    : 5,
            store       : storeUsers,
//            prependButtons: true,
            displayInfo : true
        }),
        tbar: [
            {
                text: 'Добавить',
                handler: function () {
                    win(formUsers(null));
                }
            },'-', '->','-', 'Поиск: ', field, comboList
            , ' ', 'Целиком', CheckBox, '-', button
        ],
        columns: [
            {
                header      : 'Номер',
                dataIndex   : 'id',
                sortable    : true
            },
            {
                header      : 'Имя пользователя',
                dataIndex   : 'name',
                sortable    : true
            },
            {
                header      : 'Тип пользователя',
                dataIndex   : 'type',
                sortable    : true
            },
            {
                header      : 'E-mail',
                dataIndex   : 'email',
                sortable    : true
            },
            {
                header      : 'Код',
                dataIndex   : 'code',
                sortable    : true
            },
            {
                header      : 'Пароль',
                dataIndex   : 'pass',
                sortable    : true
            },
            {
                header      : 'Дата регистрации',
                dataIndex   : 'date_reg',
                sortable    : true
            },
            {
                header      : 'Последний визит',
                dataIndex   : 'date_last',
                sortable    : true
            }
        ]
    });
    return gridUsers;
}

Ex_Soft 01.11.2010 10:27

Цитата:

Сообщение от DenQ (Сообщение 76769)
проблема в том что поиск работает корректно до той поры пока я не нажму кнопку для просмотра следующей страницы... если это сделать, то теряются настройки поиска(необходимые параметры в запросе сторы отсутствуют)

Запихивайте подстроку поиска в baseParams

cmygeHm 01.11.2010 17:04

storage1.on('beforeload', function() {
        storage1.baseParams = {
                            _phone: phone.getValue(),
                            _name: name.getValue()

        };
    });

Где name и phone мои поля со значениями, которые я искал.

DenQ 01.11.2010 21:34

cmygeHm, ну так а куда его вставить, этот код после замены на свои параметры, естественно?

Ex_Soft 01.11.2010 23:09

Цитата:

Сообщение от DenQ (Сообщение 76945)
а куда его вставить, этот код после замены на свои параметры, естественно?

Ну... Если не будет никаких эстетических возражений - можно хоть сразу после определения store...

DenQ 02.11.2010 00:16

cmygeHm, Ex_Soft, ребят, огромное вам человеческое спасибо.


Часовой пояс GMT +3, время: 18:00.