Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缓冲网格和行扩展器插件在extjs中不起作用_Extjs_Plugins_Infinite Scroll_Extjs4.2_Rowexpansion - Fatal编程技术网

缓冲网格和行扩展器插件在extjs中不起作用

缓冲网格和行扩展器插件在extjs中不起作用,extjs,plugins,infinite-scroll,extjs4.2,rowexpansion,Extjs,Plugins,Infinite Scroll,Extjs4.2,Rowexpansion,要求:为extjs(4.2.2)网格提供无限滚动以及行扩展功能 但这两个插件一起不起作用, 行扩展器插件不允许数据加载到网格的缓冲存储中 当rowexpander插件被注释时,无限滚动网格正在加载 如何同时具备这两种功能 我通过扩展extjs rowexpander创建了一个rowexpander插件,如下所示, 这里,如果我在第行下面注释,至少有一个rec正在加载 feature.getRowBodyContents=Ext.bind(me.getRowBodyContents,me) Ext

要求:为extjs(4.2.2)网格提供无限滚动以及行扩展功能

但这两个插件一起不起作用, 行扩展器插件不允许数据加载到网格的缓冲存储中

当rowexpander插件被注释时,无限滚动网格正在加载

如何同时具备这两种功能

我通过扩展extjs rowexpander创建了一个rowexpander插件,如下所示, 这里,如果我在第行下面注释,至少有一个rec正在加载

feature.getRowBodyContents=Ext.bind(me.getRowBodyContents,me)

Ext.define('Premier.view.tools.NM.Plugin.NotesGridRowExpander', {

    extend: 'Ext.grid.plugin.RowExpander',

    alias: 'plugin.notes-rowexpander',
    rowBodyTpl: [
        '<div class="notes-management-tool"> ',
        '<table cellspacing="0" cellpadding="0" class="notes-management-tool-table">',
            '<tr>',
                '<th valign="middle" class="notes-management-tool-table-date" style="color:black;width:130px;">Last Edited Date</th>',
                '<th valign="middle" class="notes-management-tool-table-note" style="color:black;width:360px;">Notes</th>',
                '<th valign="middle" class="notes-management-tool-table-editedBy" style="color:black;width:210px;">Last Edited By</th>',
                '<th valign="middle" class="notes-management-tool-table-actions" style="color:black;width:50px;">Actions</th>',
            '</tr>',
            '<tpl for=".">',
               '<tr>',
                    '<td valign="middle" class="notes-management-tool-table-date" style="color:black">{[(Ext.util.Format.date(Ext.Date.parse(values.LastEditedDate, "MS"), "M-d-Y h:i A"))|| "&nbsp;"]}</td>',
                    '<td valign="middle"class="notes-management-tool-table-note" style="color:black">{[(values.Note)|| "&nbsp;"]}</td>',
                    '<td valign="middle" class="notes-management-tool-table-editedBy" style="color:black">{[(values.LastEditedBy)|| "&nbsp;"]}</td>',
                    '<td valign="right" class="notes-management-tool-table-actions" ><div style="margin-left:3px" data-qtip="Edit"  class = "{[parent.AccountId == values.LastEditedById ?   "edit-notes-record-icon-active " : "edit-notes-record-icon-inactive "]}-noteId-{[this.getStringId(values.NoteId)]}-entityId-{[this.getStringId(values.EntityId)]}-entityTypeId-{[this.getStringId(values.EntityTypeId)]}"></div><div style="margin-left:3px" data-qtip="Delete"  class = "{[parent.AccountId == values.LastEditedById ?   "trash-icon " : "disabled-trash-icon " ]}-noteId-{[this.getStringId(values.NoteId)]}-entityId-{[this.getStringId(values.EntityId)]}-entityTypeId-{[this.getStringId(values.EntityTypeId)]}"></div></td>',
                '</tr>',
            '</tpl>',
        '</table>',
        '</div> ',
        {
            getStringId: function (id) {
                return id.toString();
            }
        }
    ],
    expandAllFlag: false,
    constructor: function () {
        var me = this;
        me.callParent(arguments);
    },

    setCmp: function (grid) {

        var me = this, features, i, feature;

        me.callParent(arguments);

        features = grid.features;

        for (i = 0; i < features.length; i++) {
            if ((feature = features[i]).ftype == 'rowbody') {
                break;
            }
        }
        if (feature) {
            //This function is abstracted as a private function kind of. So overriding the method to call
            //our own function
            feature.getRowBodyContents = Ext.bind(me.getRowBodyContents, me);
        }
    },

    getRowBodyContents: function (record) {
        var content = '', data;
        if(record.data) {
            data = record.data.NotesChildViews.sort(
                function (rec1, rec2) {
                    var a= Ext.Date.parse(rec1.LastEditedDate, "MS");
                    var b =Ext.Date.parse(rec2.LastEditedDate, "MS");
                    return a>b ? -1 : a<b ? 1 : 0;

                });
        }

        if (data) {
            data.AccountId = this.grid.app.getAccountId();
            content = this.rowBodyTpl.apply(data);
        }
        return content;
    },


    getHeaderConfig: function () {
        var me = this;

        return {
            itemId: 'rowExpanderHeader',
            width: 40,
            lockable: false,
            sortable: false,
            resizable: false,
            draggable: false,
            hideable: false,
            text: '<div class="notes-grid-expand"></div>',
            menuDisabled: true,
            tdCls: Ext.baseCSSPrefix + 'grid-cell-special',
            innerCls: Ext.baseCSSPrefix + 'grid-cell-inner-row-expander',
            renderer: function (value, metadata) {
                // Only has to span 2 rows if it is not in a lockable grid.
                if (!me.grid.ownerLockable) {
                    metadata.tdAttr += ' rowspan="2"';
                }
                return '<div style="margin: 4px 0px 0px 8px;" class="' + Ext.baseCSSPrefix + 'grid-row-expander" role="presentation"></div>';
            },
            processEvent: function (type, view, cell, rowIndex, cellIndex, e, record) {
                if (type == "mousedown" && e.getTarget('.' + Ext.baseCSSPrefix + 'grid-row-expander')) {
                    me.toggleRow(rowIndex, record);
                    return me.selectRowOnExpand;
                }
            },
            listeners: {
                'afterrender': me.handleExpansion,
                scope: me
            }
        };
    },
    handleExpansion: function (headerObj) {
        var me = this;
        headerObj.el.on('click', function () {

            me.cmp.fireEvent('notes-grid-expansion');
        });    
    },
    updateHeaderText: function () {
        var me = this;
        if (me.expandAllFlag == false) {
            me.cmp.headerCt.down('#rowExpanderHeader').setText('<div class="notes-grid-collapse"></div>');
            me.expandAllFlag = true;
        }
        else {
            me.cmp.headerCt.down('#rowExpanderHeader').setText('<div class="notes-grid-expand"></div>');
            me.expandAllFlag = false;
        }
    },
    setDefaultHeader: function () {
        var me = this;
        me.cmp.headerCt.down('#rowExpanderHeader').setText('<div class="notes-grid-expand"></div>');
        me.expandAllFlag = false;
    }
});
Ext.define('Premier.view.tools.NM.Plugin.NotesGridRowExpander'{
扩展:“Ext.grid.plugin.RowExpander”,
别名:“plugin.notes行扩展器”,
rowBodyTpl:[
' ',
'',
'',
“上次编辑日期”,
“注意事项”,
'上次编辑人',
"行动",,
'',
'',
'',
“{[(Ext.util.Format.date(Ext.date.parse(values.lastedDate,“MS”),“M-d-Y h:ia”))| |“”]},
“{[(values.Note)| |”“]}”,
“{[(values.lastedby)| |“”]}”,
'',
'',
'',
'',
' ',
{
getStringId:函数(id){
返回id.toString();
}
}
],
expandAllFlag:false,
构造函数:函数(){
var me=这个;
me.callParent(参数);
},
setCmp:函数(网格){
var me=这个,特征,i,特征;
me.callParent(参数);
features=grid.features;
对于(i=0;i返回a>b?-1:a此解决方案使用
bufferedrenderer
rowexpander
插件。我不知道如何获取数据,因此示例生成一些伪数据并动态加载数据

我希望这有帮助

Ext.define('testmodel', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'name', type: 'string'},
        {name: 'index', type: 'number'}
    ]
});


Ext.define('Test.RowExpander', {

    extend: 'Ext.grid.plugin.RowExpander',

    rowBodyTpl: [
        "<tpl>",
        "<p>Item name: {name}</p>",
        "<p>Item index: {index}</p>",
        "</tpl>"
    ],
    expandAllFlag: false,   

    constructor: function() {
        this.callParent(arguments);
    },

    setCmp: function (grid) {

        var me = this, features, i, feature;

        me.callParent(arguments);

        features = grid.features;

        for (i = 0; i < features.length; i++) {
            if ((feature = features[i]).ftype == 'rowbody') {
                break;
            }
        }
        if (feature) {
            feature.getRowBodyContents = Ext.bind(me.getRowBodyContents, me);
        }
    },

    getRowBodyContents: function (record) {
        var content = '', data;
        if (record.data) {
            data = record.data;
        }
        if (data) {
            content = this.rowBodyTpl.apply(data);
        }   
        return content;
    }

});

Ext.onReady(function() {

    Ext.define('Test.TestWindow', {
        extend: 'Ext.window.Window',

        closeAction: 'destroy',
        border: false,
        width: 560,
        height: 500,
        modal: true,
        closable: true,
        resizable: false,
        layout: 'fit',

        setStoreData: function() {
            var me = this;

            me.storeData = [];
            for (i = 1; i <= 15000; i++) {
                me.storeData.push(
                    {"name": "Name"+i, "index": i}
                );
            }
        },

        initComponent: function() {
            var me = this;
            me.callParent(arguments);

            me.setStoreData();
            me.store = Ext.create('Ext.data.Store', {
                autoLoad: false,
                pageSize: 16,
                data: [],       
                model: 'testmodel'
            });

            me.rowexpander = Ext.create('Test.RowExpander', {

            });
            me.bufferedrenderer = Ext.create('Ext.grid.plugin.BufferedRenderer', {
            });

            me.grid = Ext.create('Ext.grid.Panel', {
                loadMask: true,
                plugins: [
                    me.bufferedrenderer,
                    me.rowexpander
                ],
                selModel: {
                    pruneRemoved: false
                },
                stripeRows: true,
                store: me.store,
                columnLines: false,
                columns : [
                    {header : 'Name', sortable : true, width: 100, dataIndex : 'name'},
                    {header : 'Index', sortable : true, width : 100, dataIndex : 'index'}
                ]
            });
            me.add(me.grid);

            me.store.loadData(me.storeData);
        }
    }); 

    var win = new Test.TestWindow({
    });
    win.show();

});
Ext.define('testmodel'{
扩展:“Ext.data.Model”,
字段:[
{name:'name',type:'string'},
{name:'index',键入:'number'}
]
});
Ext.define('Test.RowExpander'{
扩展:“Ext.grid.plugin.RowExpander”,
rowBodyTpl:[
"",
“项目名称:{name}

”, “项目索引:{index}

”, "" ], expandAllFlag:false, 构造函数:函数(){ this.callParent(参数); }, setCmp:函数(网格){ var me=这个,特征,i,特征; me.callParent(参数); features=grid.features; 对于(i=0;i对于(i=1;i如何实现缓冲-使用“bufferedrenderer”插件或使用store的“buffered”配置?很高兴看到您的代码。谢谢。我使用的是buffered配置。您可以创建一个Sencha文件,并发布链接吗?@Prasu如何加载数据-使用“autoLoad”:true或with load()方法?谢谢。我现在正在使用store.loadPage(1)我们能测试这个sin fiddle吗?你能滚动网格吗?@Prasu用fiddle链接更新了答案。谢谢,你的例子看起来不错,但在我的例子中,数据来自服务器,我通过扩展Ext.grid.plugin.rowexpander创建了一个rowexpander插件。在这个rowexapnder中,如果我有评论的话feature.getRowBodyContents=Ext.bind(me.getRowBodyContents,me);"然后部分加载数据。因此我怀疑getRowBodyContents方法有问题。@Prasu我已经根据您的代码更新了答案和小提琴。它简化了,但有效。您的示例看起来很完美,那么为什么它因为getRowBodyContents而阻止我加载网格?我遗漏了什么吗?我已经做了所有的事情在你的例子中有很多。