在 ExtJS 中为存储输出实现 Task Runner

Implementing Task Runner for store output in ExtJS

我是 ExtJS 的新手,我有点陷入其中一个问题,所以我需要你的帮助。

基本上我使用以下 URL:

访问我的应用程序
servername:port/XMII/CM/XYZ/index.html?machine=1&typeofpage=dashboard

我通过全局控制器 getMode() 中使用的以下代码获得这些 URL 参数机器和 typeofpage:

//get the url parameters
var url = window.location.search,
urlParams = Ext.Object.fromQueryString(url);

return {

    machineID: urlParams.machine,
    typeofPage: urlParams.typeofpage
};

现在根据页面的类型,我通过初始视口的afterrender方法中的以下代码来决定打开哪个页面:

var 模式 = this.getMode();

if(mode.typeofpage=== 'dashboard') {

      panel = Ext.create('XYZ.view.Dashboard',{
        ID_MACHINE: mode.machineID
    });

          component.add(panel);

}

所以上面的代码调用我的仪表板页面正确地将 machineID 传递为 1。

有了这个 machineID 属性,我将它传递给存储 MachineParts,这个存储为我提供了机器 ID 1 的所有 hte 机器部件。以下是 XYZ.view.Dashboard 的 aferrender 中的代码:

var me = this,
    machinepartIds= [];

Ext.defer(function(){

    component.mask('Loading...');

    me.getStore('MachinePart').load({
            params:{
                'Param.1': component.ID_MACHINE
            },
            callback: function(response) {
                component.unmask();
                Ext.each(response, function(panel) {
                    machinepartIds.push(panel.get('MachinePartID'));

                });
   alert('Machine IDs: ' + machinepartIds.toString();
        }
    });
},10);

所以假设它返回了以下数据:

MachineID    MachinePartID
   1               20
   1               21
   1               22

现在我有一个名为 loadKPIs 的函数,它将参数作为 ID - 即 machinepartID。我使用此 loadKPIs 函数填充页面上的所有 KPI,并将它们显示为特定机器部件 ID 作为仪表板。

我想每 10 分钟将机器部件 ID 20、21、22 传递给 loadKPIs 函数,这样我就可以显示每个机器部件的仪表板 10 分钟。

例如,我将从机器零件 ID 20 开始。10 分钟后,我想将机器零件 ID 传递为 21。10 分钟后,我想将机器零件 ID 传递为 22。然后在 10 后再次返回 20分钟。我确定我需要使用 TaskRunner,但我不知道该怎么做。

尝试在应用程序或仪表板内设置计时器。例如

var machineParts = [20, 21, 22];
setTimeout(function() {
    YourApp.app.redirectTo('servername:port/XMII/CM/XYZ/index.html?machine=' + machinParts.shift() + '&typeofpage=dashboard');
}, 10 * 60 * 1000);

然而,这将导致该页面重新加载,因此最好在您的仪表板中实现类似的东西,这只会改变您显示机器零件相关内容的面板。

如果您想使用 Ext.util.TaskManager 每隔一段时间调用一个函数,并有一个友好的 API 并控制到 start/stop ,这里有一个简单的代码片段:

var task = Ext.util.TaskManager.newTask({
    interval : 600000,
    scope    : this,
    run      : function() {}
});

Ext.util.TaskManager.start(task);

或者你当然可以使用 setInterval:

setInterval(function() {
    doSomething();
}, 6000000);