0

ボタンのあるグリッドビューがあります。ボタンがクリックされると、コントローラーからメソッドが呼び出されます。その方法では、ロード画面を表示してから、いくつかのことを行ってから、ロード画面を非表示にしようとしています。そのようです:

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

同じ問題があり、ストアの「beforeload」リスナーで setLoading(true) を呼び出し、ロード コールバックで setLoading(false) を呼び出して解決しました。それは完璧に機能します。

以下は、View Controller の観点からの例です。

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 に答える