1

グリッドのいくつかの列をロックする必要があります。グリッドの構成を使用した私のコードは次のとおりです。

Ext.define('Crm.view.tables.baseTable', {
extend: 'Ext.grid.Panel',
alias : 'widget.baseTable',
columnLines: true,
initComponent: function(){
var that = this;
var $this = that;

this.selType = 'checkboxmodel',
this.selModel = {
    allowDeselect: true,
    mode: "MULTI"
};

this.plugins = [
    new Ext.grid.plugin.CellEditing({
            clicksToEdit: 2
        }),
        {
            ptype: 'bufferedrenderer',
            numFromEdge: 8,
            trailingBufferZone: 10,
            leadingBufferZone: 10
        }
];

var filters = {
        ftype: 'filters',
        encode: true,
        local: true

    };

this.features = [filters];

    var columns = [
        new Ext.grid.RowNumberer(),
        {
            header   : 'ID',
            dataIndex: 'id',
            locked   : true,
            filterable: true,
            width    : 30
        },{
            header  : 'ФИО',
            width   : 100,
            dataIndex: 'name',
            filterable: true,
            filter: {
                type: 'string'
            },
            editor: 'textfield'
        },{
            header   : 'Телефон',
            dataIndex: 'phone',
            filterable: true,
            width    : 75,
            editor: 'textfield'
        },{
            header   : 'Email',
            dataIndex: 'email',
            filterable: true,
            width    : 90,
            editor: 'textfield'
        }
    ];

this.columns = columns

var tbar = [{
        text: 'Обновить',
        handler: function(){
            $this.getStore().reload();
        }
},'-',{
    text: 'Очистить фильтр',
    handler: function () {
        that.filters.clearFilters();
    }
},'-']

this.tbar = tbar;

this.callParent();

}
});

しかし、私はエラーが発生します:

Uncaught TypeError: Cannot call method 'on' of undefined ext-all-debug.js:115013

bufferedrenderer構成からプラグインを削除すると、ロックされた列が機能します。何が問題ですか?答えてくれてありがとう!

4

1 に答える 1

1

これは EXTJS 4.2.1 用です。

次のコードは、「Ext.data.grid.plugin.Bufferedrenderer」の init 関数です。グリッドのロック機能を使用すると、ExtJs は grid.view を「Ext.grid.locking.View」でラップします。次に、init 関数は、ラッパーでは使用できない grid.view のプロパティを見つけようとします。そのため、init関数に数行追加しました(以下で「// locklock.Viewをgrid.Viewに置き換えます」で見つけてください)、問題を解決します。

以下のinit関数で「Ext.data.grid.plugin.Bufferedrenderer」を拡張してクラスを作成するだけです。

Martin.P - EMH コンサルティング。

init: function(grid) {
    var me = this,
        view = grid.view,
        viewListeners = {
            scroll: {
                fn: me.onViewScroll,
                element: 'el',
                scope: me
            },
            boxready: me.onViewResize,
            resize: me.onViewResize,
            refresh: me.onViewRefresh,
            scope: me,
            destroyable: true
        };

    //********************************************************************
    // replace locking.View with grid.View  - hayangae@gmail.com
    if (view.isLockingView){
        view = view.getViewForColumn();
    }
    //********************************************************************

    // If we are using default row heights, then do not sync row heights for efficiency
    if (!me.variableRowHeight && grid.ownerLockable) {
        grid.ownerLockable.syncRowHeight = false;
    }

    // If we are going to be handling a NodeStore then it's driven by node addition and removal, *not* refreshing.
    // The view overrides required above change the view's onAdd and onRemove behaviour to call onDataRefresh when necessary.
    if (grid.isTree || grid.ownerLockable && grid.ownerLockable.isTree) {
        view.blockRefresh = false;
        view.loadMask = true;
    }
    if (view.positionBody) {
        viewListeners.refresh = me.onViewRefresh;
    }
    me.grid = grid;
    me.view = view;
    view.bufferedRenderer = me;
    view.preserveScrollOnRefresh = true;

    me.bindStore(view.getStore());
    view.getViewRange = function() {
        return me.getViewRange();
    };

    me.position = 0;

    me.gridListeners = grid.on('reconfigure', me.onReconfigure, me);
    me.viewListeners = view.on(viewListeners);
},
于 2013-10-31T19:54:08.257 に答える