Extjs 4.1 - 隐藏窗口并在MessageBox中再次显示失败

时间:2013-08-03 16:25:49

标签: extjs extjs4.1

我定义了一个类似 http://jsfiddle.net/KABQD/ 的窗口
这是我的窗口

Ext.define('MyWindow', {
    extend: 'Ext.window.Window',
    title: 'window',   
    width:200,
    height:100,

    modal:true,
    closable:false,
    tbar: [{    
        text:'hide',
        handler:function(){
            this.up('window').hide();
        }
    }]
});

还有一个按钮。如果单击按钮,我的窗口将首次创建并显示。如果再次单击按钮,则会显示窗口。但是当我使用Messagebox时失败了。
如何解决这个问题

这是我的按钮

Ext.create('Ext.Button', {
    text: 'Click me',
    visible: false,
    renderTo: Ext.getBody(),
    handler: function() {
        var x = 0;
        Ext.WindowManager.each(function(win) {
            x = 1;
            win.show();
        });
        if (x == 0){
            // if don't use MessageBox then will working
            Ext.MessageBox.show({ 
                msg: 'wait...', 
                progressText: 'Loading...', 
                width:300, 
                wait:true, 
                waitConfig: {interval:200}
            });
            //Ext.Ajax.request({
                //url : 'example.php'
                //,success: function(response, opts) {
                    var a = new MyWindow();
                    a.show();
                    Ext.MessageBox.hide();  
                //}
            //});
        }
    }
});

1 个答案:

答案 0 :(得分:0)

问题是WindowManager无法看到您的对象。您应该使用id来实例化MyWindow对象,例如new MyWindow({id: 'NewWindow'});然后您可以在WindowManager中捕获您的对象并调用show()方法。

工作示例: http://jsfiddle.net/A92yN/3/

完整代码:

Ext.define('MyWindow', {
    extend: 'Ext.window.Window',
    title: 'window',   
    width:200,
    height:100,

    modal:true,
    closable:false,
    tbar: [{    
        text:'hide',
        handler:function(){
            this.up('window').hide();
        }
    }]
});
Ext.onReady(function () {
      Ext.create('Ext.Button', {
        text: 'Click me',
        visible: false,
        renderTo: Ext.getBody(),
        handler: function() {
            var x = 0;
            Ext.WindowManager.each(function(win) {
                x = 1;
                var win = Ext.getCmp('NewWindow');
                win.show();
            });
            if (x == 0){
                // if don't use MessageBox then will working
                Ext.MessageBox.show({ 
                    msg: 'wait...', 
                    progressText: 'Loading...', 
                    width:300, 
                    wait:true, 
                    waitConfig: {interval:200}
                });
                //Ext.Ajax.request({
                    //url : 'example.php'
                    //,success: function(response, opts) {
                        var a = new MyWindow({id: 'NewWindow'});
                        a.show();
                        Ext.MessageBox.hide();  
                    //}
                //});
            }
        }
    });
});