ExtJS 5 - 在数据存储重新加载

时间:2016-02-22 22:33:54

标签: extjs scroll refresh

当我的数据存储区重新加载时,有人能告诉我如何保持滚动条的位置吗?下面是我对窗口/网格和刷新代码的代码。每次refreshActions执行滚动条滚动到网格的顶部:

preserveScrollonRefresh 在此方案中不起作用

查看

Ext.define('Tool.view.ActionView',{
extend: 'Ext.window.Window',
xtype: 'toolactions',
requires:[
    'Tool.view.ActionController'
    ],
controller: 'actions',
viewModel: {},
layout: { type: 'border' },
closeAction: 'hide',
title: 'Actions',
store: 'Task',
width: 1500,
height: 800,    
items: [{
                id: 'ChangeLog',
                xtype: 'grid',
                selType: 'rowmodel',
                split: true,
                title: 'Log',
                region: 'south',
                width: 600,
                height: 300,
                bind: {store: '{tasks}'},
                columns: {
                    defaults: {
                    width: 175
                    },
                    items: [
                            { text: 'Script Command', dataIndex: 'command_script', flex: 1},
                            { text: 'Output', dataIndex: 'command_output', width: 250, flex: 1 },
                            { text: 'Status', dataIndex: 'state', width: 250, flex: 1 }]
                    },

            bbar: ['->',{
                           xtype: 'button',
                           text: 'Refresh',
                           listeners: {
                               click: 'refreshActions'
                           }
                    }
            ]

            }]

刷新代码

refreshActions: function() {
    var me = this;
    this.currentRecord.tasks().load(function(records, operation, success) {
        if(!operation.wasSuccessful()) {
            var message = "Failed to load data from server.";

            if(operation.hasException())
                message = message + " " + operation.getError();

            var app = Tool.getApplication();
            app.toast(message,'error');
        }
        else { 
            me.configureButtons();
            me.configureAutoRefresh();
        }
    });
}

检测自动刷新

configureAutoRefresh: function() {
    var autoRefresh = false;
    var maxId = this.getMaximumId(this.currentRecord.tasks());
    var maxRecord = this.currentRecord.tasks().getById(maxId);

    if(maxRecord.data.state=='1' || maxRecord.data.state=='0') {
        autoRefresh = true;
    }

    if(autoRefresh == true) {
        if(this.autoRefreshTask == null) {
            var me = this;
            var task = 
                    {
                        run: function() {
                            me.refreshActions();
                            return true;
                        },
                        interval: 2000 // 2 seconds
                    };
            this.autoRefreshTask = Ext.TaskManager.start(task);
        }
    }
    else if(this.autoRefreshTask != null) {
        Ext.TaskManager.stop(this.autoRefreshTask);
        this.autoRefreshTask = null;
    }
}

1 个答案:

答案 0 :(得分:0)

在我看来,你有2个选项,不一定互相排斥:

  1. 如果选择了网格行:

    在商店重新加载之前,使用getSelection()方法获取所选记录,并在操作完成后使用ensureVisible( record, [options] )方法将该记录滚动到视图中。

  2. 如果未选择任何行:

    在商店重新加载之前,使用getScrollX()方法获取当前滚动位置(我假设您的情况是X),在操作完成后,使用setScrollX(x, [animate])返回上一个滚动位置。