ExtJS4.2网格过滤器通过分页留下空行--NewbieQ

时间:2014-01-05 19:33:29

标签: grid filtering extjs4.2

我尝试了各种方法来刷新网格,但我尝试的一切都不起作用。我刷新网格还是加载商店?您可以看到分页工具栏在过滤后仍显示50页。如果给定pag上没有日期并且它是空的,那么它将禁用工具栏,并且在该页面之后分页不起作用,而不是刷新浏览器并跳过空白页面。所以,在我的情况下,第15页没有行,所以当你点击下一步并获得该页面时它会中断。如果您输入页码16,那么一切都很好,直到您点击另一个空页面。 我的datepicker在我的视口下面,我尝试刷新网格并加载商店以及其他主要导致未定义错误的东西。不知道从哪里开始,所以我将在下面显示我的代码和屏幕截图:

日期选择前:

enter image description here

日期选择后:

enter image description here

STORE:

Ext.define('AM.store.Users', {
extend: 'Ext.data.Store',
model: 'AM.model.User',
autoLoad: true,
autoSync:true,
pageSize:50,
proxy:
{
    type: 'ajax',

     //extraParams :{limit:1000},

    api:
    {
        read: 'http://192.168.0.103/testit/dao_2.cfc?method=getContent',
        update: 'http://192.168.0.103/testit/dao_2-post.cfc?method=postContent'
    },
    reader:
    {
        type: 'json',
        root: 'data',
        successProperty: 'success',
        totalProperty : 'dataset',
        remoteFilter : true
    },
    listeners:
    {
        // stuff goes here maybe??

    }
}   
});

网格面板:

Ext.define('AM.view.user.List' ,{
extend: 'Ext.grid.Panel',
alias: 'widget.userlist',
title: 'All Users',
store: 'Users',
//buffered: true,
plugins:[Ext.create('Ext.grid.plugin.RowEditing', {clicksToEdit: 2})],
dockedItems: [{ xtype: 'pagingtoolbar',
                store: 'Users',
                dock: 'bottom',
                displayMsg: 'Displaying Records {0} - {1} of {2}',
                displayInfo: true}],


initComponent: function() {

    this.columns = [
                    Ext.create('Ext.grid.RowNumberer',
                        {
                        resizable: true,
                        resizeHandles:'all',
                        align: 'center',
                        minWidth: 35,
                        maxWidth:50
                        }),
                    {
                    header: 'Name',
                    dataIndex: 'message_id',
                    flex: 1,
                    editor:'textfield',
                    allowBlank: false,
                    menuDisabled:true
                    },
                    {
                    header: 'Email',
                    dataIndex: 'recip_email',
                    flex: 1,
                    editor:'textfield',
                    allowBlank: false,
                    menuDisabled:true
                    },
                    {
                    header: 'Date Time',
                    dataIndex: 'unix_time_stamp',
                    width: 120,
                    menuDisabled:true,
                    // submitFormat: 'd/m/Y',
                    renderer: Ext.util.Format.dateRenderer('m/d/Y'),
                    field:{ xtype:'datefield',
                            autoSync:true,
                            allowBlank:false,
                            editor: new Ext.form.DateField(
                                    {format: 'm/d/y'})  }
                    }];


    this.callParent(arguments);

},

});

VIEWPORT:

Ext.Loader.setConfig({enabled:true});

Ext.application({
requires: ['Ext.container.Viewport'],
name: 'AM',
appFolder: 'app',
controllers: ['Users'],

launch: function() {

    Ext.create('Ext.container.Viewport', {
    layout: 'border',
    items:[{
            region: 'center',
            itemId:'centerPanelRegion',
            title:'The Title',
            xtype: 'tabpanel',
            hidden: true,
            activeTab: 0,
            items:[{
                    xtype: 'userlist',
                    listeners:
                    {
                        select: function(selModel, record, index, options)
                        {
                            // do something with the selected date
                            console.log('select');
                        },
                        add: function(selModel)
                        {
                            // do something with the selected date
                            console.log('add - init2.js');
                        },
                        afterrender:function(selModel)
                        {
                            // do something with the selected date
                            console.log('afterrender - userlist(init2.js)');
                        },
                        beforerender:function(selModel)
                        {
                            // do something with the selected date
                            console.log('beforerender - userlist(init2.js)');
                        }
                    }
                  }]
            },
            {
            region: 'west',
            itemId:'westPanelRegion',
            hidden: true,
            layout:'fit',
            xtype: 'tabpanel',
            activetab:0,
            collapsible:false,
            split: false,
            title: 'The Title',
            width:178,
            maxWidth:400,
            height: 100,
            minHeight: 100,
            items:[{
                    title: 'Tab 1',
                    xtype:'panel',
                    items:
                        [{
                        xtype: 'datepicker',
                        itemId:'datePickerFld',
                        listeners:{
                            beforerender: function(){
                                console.log('datepicker - beforerender(init2.js)');
                                var store = Ext.getStore('dates');
                                store.load({callback: function(){
                                console.log('datepicker - callback(init2.js');
                                console.log(store.data.items[999].data.recip_email);
                                console.log(store.data.items[999].data.unix_time_stamp);
                                }
                                })
                            }
                        },

                        handler: function(picker, date)
                            {
                            // do something with the selected date
                            console.log('date picker example in init2.js' + Ext.Date.format(date,'m/d/Y'));

                            // get store by unique storeId
                            var store = Ext.getStore('Users');

                            // clear current filters
                             store.clearFilter(true);

                            // filter store
                            Ext.encode(store.filter("unix_time_stamp", Ext.Date.format(date,'m/d/Y')));

                            //store.load();
                            //store.sync();

                            }
                        }]
            },
            {
                title: 'Tab 2',
                html: 'ers may be added dynamically  - Others may be added dynamically',
            }]

         }]
    });
}
});

控制器:

Ext.define('AM.controller.Users', {
extend: 'Ext.app.Controller',
stores:['Users', 'dates'],
models:['User', 'date'],
views: ['user.List','user.Edit'],


init: function() {

    Ext.getStore('dates').addListener('load',this.ondatesStoreLoad, this);

    this.control(
    {

        'viewport > userlist':
        {
            itemdblclick: this.editUser,
        },

        'useredit button[action=save]':
        {
            click: this.updateUser
        }           

    });

},


// ----------  handler Function declarations  -------------

ondatesStoreLoad: function(me,records,success)
{

// ------  Gets the dates from dates store and loads an array
var store = this.getStore('dates');
sendDataArray = [];

store.each(function(record){
    var recordArray = [record.get("unix_time_stamp")];
    sendDataArray.push(recordArray);
});         


// ------  Set DatePicker Bullshit right fucking here  --------//

var dtFld = Ext.ComponentQuery.query('#datePickerFld')[0];

dtFld.setDisabledDates(["^(?!"+sendDataArray.join("|")+").*$"]);
dtFld.setMaxDate(new Date());
dtFld.setMinDate(new Date('05/01/2013'));


var wstPnlReg = Ext.ComponentQuery.query('#westPanelRegion')[0];
wstPnlReg.show();

var ctrPnlReg = Ext.ComponentQuery.query('#centerPanelRegion')[0];
ctrPnlReg.show();

// var grid = Ext.widget('userlist');

},

onUsersStoreDataChange: function(me)
{
    //console.log('Hey the store data just changed!');
},

editUser: function(grid, record)
{
    var view = Ext.widget('useredit');
    view.down('form').loadRecord(record);
},

updateUser: function(button)
{
    var win    = button.up('window'),
        form   = win.down('form'),
        record = form.getRecord(),
        values = form.getValues();

    record.set(values);
    win.close();
    this.getUsersStore().sync();
},

});

更新的VIEWPORT: 仅在datepicker处理程序中进行的更改

Ext.Loader.setConfig({enabled:true});

Ext.application({
requires: ['Ext.container.Viewport'],
name: 'AM',
appFolder: 'app',
controllers: ['Users'],

launch: function() {

    Ext.create('Ext.container.Viewport', {
    layout: 'border',
    items:[{
            region: 'center',
            itemId:'centerPanelRegion',
            title:'The Title',
            xtype: 'tabpanel',
            hidden: true,
            activeTab: 0,
            items:[{
                    xtype: 'userlist',
                    listeners:
                    {
                        select: function(selModel, record, index, options)
                        {
                            // do something with the selected date
                            console.log('select');
                        },
                        add: function(selModel)
                        {
                            // do something with the selected date
                            console.log('add - init2.js');
                        },
                        afterrender:function(selModel)
                        {
                            // do something with the selected date
                            console.log('afterrender - userlist(init2.js)');
                        },
                        beforerender:function(selModel)
                        {
                            // do something with the selected date
                            console.log('beforerender - userlist(init2.js)');
                        }
                    }
                  }]
            },
            {
            region: 'west',
            itemId:'westPanelRegion',
            hidden: true,
            layout:'fit',
            xtype: 'tabpanel',
            activetab:0,
            collapsible:false,
            split: false,
            title: 'The Title',
            width:178,
            maxWidth:400,
            height: 100,
            minHeight: 100,
            items:[{
                    title: 'Tab 1',
                    xtype:'panel',
                    items:
                        [{
                        xtype: 'datepicker',
                        itemId:'datePickerFld',
                        listeners:{
                            beforerender: function(){
                                console.log('datepicker - beforerender(init2.js)');
                                var store = Ext.getStore('dates');
                                store.load({callback: function(){
                                console.log('datepicker - callback(init2.js');
                                console.log(store.data.items[999].data.recip_email);
                                console.log(store.data.items[999].data.unix_time_stamp);
                                }
                                })
                            }
                        },

                        handler: function(picker, date)
                            {
                                // do something with the selected date
                        console.log('date picker example in init2.js' + Ext.Date.format(date,'m/d/Y'));

                        // get store by unique storeId
                            var store = Ext.getStore('Users');

                            // clear current filters
                             store.clearFilter(true);

                            // filter store
                            store.filter("unix_time_stamp", Ext.Date.format(date,'m/d/Y'));

                        // Load the store
                        store.load();


                            }
                        }]
            },
            {
                title: 'Tab 2',
                html: 'ers may be added dynamically  - Others may be added dynamically',
            }]

         }]
    });
}
});

1 个答案:

答案 0 :(得分:0)

此行可能会导致问题。

Ext.encode(store.filter("unix_time_stamp", Ext.Date.format(date,'m/d/Y')));

我不确定为什么要在Ext.encode返回时调用store.filter,但我认为您不想这样做(并且可能导致undefined错误)。

对于不更新当前计数的分页工具栏,更新商店时可能只是在服务器响应中没有返回正确的信息。服务器响应应包括记录总数。根据{{​​1}},http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.toolbar.Paging

的文档

从服务器发回的数据包将具有以下形式:

Ext.toolbar.Paging