使用REST代理进行ExtJs网格自动刷新

时间:2017-03-07 09:41:50

标签: extjs grid

我尝试每隔5或10秒使用REST代理刷新网格,但网格不会多次刷新。请找到我们尝试过的代码。

Ext.define('App.Store.DeviceStore', {
extend: 'Ext.data.Store',
requires: [
    'Ext.data.proxy.Ajax',
    'Ext.data.reader.Json'
],
constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
        storeId: 'app.store.DeviceStore',
        model: 'App.model.DeviceModel',
        activeRefreshTask:false,
        pageSize: 5,
        autoLoad: {
            pageSize: 5
        }
    }, cfg)]);
},listeners:{
    'load':function(store,records,successful,operation){
        if(successful === true && store.activeRefreshTask === false){
        var task = {
                identifyId: 'deviceListStore',
                run: function() {
                    if (App.app._currentPage == 'devicesform') {
                        store.reload();
                    } else {    
                        Ext.TaskManager.stop(this);
                    }
                },
                interval: '10000'
            }
            Ext.TaskManager.start(task);
            store.activeRefreshTask = true;
        }
    }
}

});

上述商店的模型是

Ext.define('App.model.DeviceModel', {
extend: 'Ext.data.Model',
requires: [
    'Ext.data.field.String'
],
proxy:{
        type:'rest',
        reader: {
            type: 'json',
            rootProperty: 'data',
            totalProperty:'total'
        },
        useDefaultXhrHeader: false,
        headers:{'Content-Type':'application/json'},
        api: {
            read: 'url given gere'
        }
},

fields: [
    {
        type: 'string',
        name: 'id'
    },
    {
        type: 'string',
        name: 'name'
    },
    {
        type: 'string',
        name: 'desc'
    }, 
    {
        type: 'string',
        name: 'ipAddr'
    }

]

});

2 个答案:

答案 0 :(得分:1)

我发现了这个问题,你已经把间隔作为字符串传递给了lo号码。 只需更改为interval: '10000' to inteval: 10000,您的taskrunner就可以正常运行。

答案 1 :(得分:0)

var runner = new Ext.util.TaskRunner(),
    updateStore , task;

updateStore = function() {
                        if (App.app._currentPage == 'devicesform') {
                            store.load();
                        } else {    
                            Ext.TaskManager.stop(this);
                        }
                    };

task = runner.start({
    run: updateStore ,
    interval: 1000
});

可能你的store.reload在请求中再次发送相同的参数,因此请求不会发生任何变化。