2011-05-19 35 views
8

como una ventana en el sistema operativo Microsoft (XP, Vista, 7, etc) ...cómo hacer una ventana modal completa en ext 4?

si una ventana principal crear una ventana modal, el usuario no puede acceder a la ventana principal,
(incluyendo cerca y acceder a la barra de herramientas, etc)

quiero hacer uno similar con extjs, .. esta es mi ejemplo modal:

Ext.create("Ext.Window",{ 
    title : 'aa', 
    width : 200, 
    height: 150, 
    html : 'a', 
    tbar : [{ 
     text : 'aa' , 
     handler :function(){ 
      Ext.create("Ext.Window",{ 
       title : 'aa', 
       width : 150, 
       closable : false, 
       height: 100, 
       html : 'b', 
       ownerCt : this, 
       modal : true 
      }).show(); 
     } 
    }] 
}).show(); 

el problema es, simplemente desactivar el cuerpo de la ventana principal, el usuario todavía puede acces barra de herramientas principal , también para cerrarlo ..

mi pregunta es cómo hacer modal completa? o si no se puede hacer, cómo desactivar la ventana principal, si aparece la ventana modal, tengo use listener show en modal win, pero el problema es que no puedo acceder a la ventana principal desde este oyente ...

Editar :

este es mi código hasta ahora:

Ext.create("Ext.Window",{ 
    title : 'aa', 
    width : 200, 
    height: 150, 
    html : 'a', 
    maskOnDisable : false, 
    tbar : [{ 
     text : 'aa' , 
     handler :function(a){ 
      var parent = a.up("window"); 
      parent.disable(); 
      Ext.create("Ext.Window",{ 
       title : 'aa', 
       width : 150, 
       height: 100, 
       html : 'b', 
       listeners : { 
        scope : this, 
        "close" : function(){ 
         parent.enable(); 
        }, 
        /* 
        "blur" : function(){ 
         this.focus() 
        } 
        */ 
       } 
      }).show(); 
     } 
    }] 
}).show(); 

althougt este concepto no es modal, pero que parezca que lo que quiero ..
ahora, no tengo problema nuevo, no es maskOnDisable obras ,. .y necesito un evento como blur, entonces, si el usuario hace clic en la ventana principal, se enfoca nuevamente en la ventana emergente ...
(debo publicarlo como nueva pregunta ??)

+0

echar un vistazo a la respuesta actualizada. –

+0

@Abdel, gracias por su ayuda ... vea mi edición ... necesito poca ayuda otra vez .. –

Respuesta

8

Nueva Respuesta:

¿Ha tratado de disable() y enable() la ventana padre de manera adecuada? Creo que eso debería ayudarlo a detener el acceso a la primera ventana y, al mismo tiempo, permitirle a su usuario acceder al menú y la pantalla de la aplicación principal. Esto es lo que he intentado:

var x = Ext.create("Ext.Window",{ 
    title : 'aa', 
    width : 200, 
    height: 150, 
    html : 'a', 
    tbar : [{ 
     text : 'aa' , 
     handler :function(){ 
      // I disable the parent window. 
      x.disable(); 

      Ext.create("Ext.Window",{     
       title : 'aa', 
       width : 150, 
       closable : false, 
       height: 100, 
       html : 'b' 
       // You will need to enable the parent window in close handler of this window. 

      }).show(); 
     } 
    }] 
}).show(); 

Cuando se deshabilita la ventana, los componentes dentro de la ventana están desactivados y no se podrán incluso mover la ventana. Pero al mismo tiempo, tendrá acceso a otros componentes como su menú principal, cuadrículas en la página. También tendrá acceso a la nueva ventana. Ahora, para que se comporte como un modal, debe habilitar la ventana principal cuando cierre la ventana secundaria. Puede hacer uso del método enable() para eso.

no puedo pensar en ninguna otra manera de lograr lo que busca.


respuesta antigua:

Me pregunto por qué ha establecido la propiedad ownerCt refiriéndose a la propia ventana! Ese es tu problema principal. Al eliminar la propiedad, logrará lo que está buscando. Aquí está el código actualizado:

Ext.create("Ext.Window",{ 
    title : 'Extra window!', 
    width : 150,        
    height: 100, 
    closable : false,       
    html : 'A window that is a modal!',       
    modal : true 
}).show(); 

¿Hubo algún motivo para establecer la propiedad ownerCt?

+0

no, ... no es así, ... ¿mi pregunta no está clara? tengo una ventana principal ... que el usuario haga clic en el botón de la barra de herramientas ... aparecerá una nueva ventana ... quiero que el usuario no pueda acceder a la ventana principal ... así que necesito 'ownerCt' para especificar quién es el padre ... me gusta" opción de carpeta "en" explorador "(Ventana), el usuario no puede acceder al explorador hasta que se cierre la opción de carpeta ... –

+0

pero el usuario aún puede abrir el nuevo explorador u otra aplicación ... –

22

En estos días que ha establecido modal: true

Ext.define('myApp.view.MyModalWindow', { 
extend: 'Ext.window.Window', 
... 
modal: true, 
... 
+0

Esto se aplica a una ventana secundaria, ¿no? – jcolebrand

+1

Última respuesta: Sí :) – emolaus

+0

Sí, la propiedad de configuración modal es el camino a seguir :) Docu: http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.window.Window-cfg- modal – ArcanisCz

Cuestiones relacionadas