0

我有一个带有按钮的gridview。单击按钮时,它会从控制器调用一个方法。在那种方法中,我试图显示一个加载屏幕,然后做一些事情,然后隐藏加载屏幕。像这样:

Ext.getCmp('center-panel').setLoading(true);        
// do something that takes a couple seconds
Ext.getCmp('center-panel').setLoading(false);

但是 setLoading(true) 直到方法完成运行后才会启动。如果我注释掉 setLoading(false),加载屏幕会显示出来,直到 2 秒后才会显示,然后永远不会消失。

有人知道这是可能的还是我做错了什么?中心面板在我的视口中定义如下:

Ext.define('HelperBatchForm.view.Viewport', {
extend: 'Ext.container.Viewport',    
layout: 'fit',
items: [
    {
        region: 'center',
        id: 'center-panel',
        title: 'Batches',
        split: true,
        collapsible: true,
        xtype: 'batchgrid'
    }
    ,
    {
        region: 'south',
        id: 'south-panel',
        title: 'Batch Form',
        split: true, 
        //collapsible: true,            
        xtype: 'batchedit'            
    }
],

initComponent: function () {
    this.callParent(arguments);
}

});

谢谢!

4

5 回答 5

1

所以我找不到完美的解决方案,但我发现一个很好的解决方法是

Ext.getCmp('center-panel').setLoading(true); 
Ext.Function.defer(function () {
    // do something that takes a couple of seconds in here
    Ext.getCmp('center-panel').setLoading(false);
}, 10);
于 2015-05-05T18:46:21.893 回答
0

必须为 id 使用“#”:

Ext.getCmp('#center-panel').setLoading(true); 

无论如何,您不想在“需要几秒钟的时间”之后立即调用 setLoading(false) ,因为它会很快被解雇。

您想将回调函数传递给需要几秒钟的时间,然后从那里调用 setLoading(false)。

例子:

somePanel.setLoading(true);

someStore.load({

  callback:function(){

    somePanel.setLoading(false);

  }
}); 
于 2013-06-20T20:31:14.420 回答
0

您需要在加载之前显示面板/任何内容。例如:

        var pnl = Ext.create('my.WhateverPanel');
        pnl.show();
        pnl.setLoading(true);
        setTimeout(function (){
            pnl.setLoading(false);
        }
        ,3000);
于 2014-10-06T17:43:54.133 回答
0

我遇到了同样的问题,并通过在商店的“beforeload”侦听器中调用 setLoading(true) 和在加载回调中调用 setLoading(false) 来解决它。这完美无缺。

这是从视图控制器的角度来看的一个示例:

configureStore: function(store) {
    var me = this;
    store.on('beforeload', me.onStoreBeforeLoad, me);
    store.load({
        callback:function() {
            me.getView().setLoading(false);
        }
    });
},

onBeforeStoreLoad: function(store, operation, eOpts) {
    this.getView().setLoading(true);
}
于 2014-06-03T09:51:16.407 回答
-1

this.getView().setLoading('正在加载模块...');
setTimeout(function () {
//处理你接下来要做什么。例如:me.setCurrentView(id);
} , 1);

于 2016-07-04T21:26:07.947 回答