2011-11-23 46 views
7

He examinado muchos ejemplos de ExtJS 4 MVC, y todos muestran básicamente lo mismo: la aplicación crea una ventana gráfica, se carga en una vista y tiene un 'controlador' definido, que init es el controlador:ExtJS 4 cómo crear y visualizar un nuevo controlador/vista desde otro controlador/vista?

Ext.application({ 
    name: 'AM', 

    controllers: [ 
     'Users' 
    ], 

    launch: function() { 
     Ext.create('Ext.container.Viewport', { 
      layout: 'fit', 
      items: [ 
       { 
        xtype: 'userlist' 
       } 
      ] 
     }); 
    } 
}); 

Eso es genial, pero ahora digamos en mi aplicación. Quiero un botón dentro de mi vista para abrir un nuevo controlador/vista, ¿cómo lo hace?

Creo que lo que estoy buscando es una manera de decir algo como: - Crear controlador (ejecutar su código de inicio) - en el código del controlador de inicialización, crear la vista y mostrarlo

Es correcto , ¿Y como haces esto?

Quiero aclarar que en mi caso necesitaría DOS instancias individuales de la misma combinación de controlador/vista. Por ejemplo, podría tener una vista con un panel de pestañas y dos pestañas. Luego quiero poner DOS instancias separadas de un controlador de 'Usuario' y una vista 'user.List' dentro de cada pestaña.

Respuesta

2

Acabo de comprobar la documentación del nuevo controlador y ver las clases.

Me parece que siempre puede encontrar la vista que necesita cuando la necesita. Por ejemplo, usted puede:

//somewhere in controller 
this.getView('Viewport').create(); // or .show() 

cheque éste y clase de vista métodos:

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.app.Controller-method-getView

8

Creo que lo que estoy buscando es una manera de decir algo como: - Crear controlador (ejecutar su código de inicio): en el código de inicio del controlador, cree la vista y muéstrela

En extjs, todos los contr ollers se instancian cuando se carga la aplicación. Puede utilizar el método de lanzamiento en la clase Application para comenzar una vista. Y haga que un controlador escuche los eventos de esa vista. En un controlador, siempre se puede acceder al otro controlador mediante el objeto application:

this.application.getController('ControllerName1').displayListPanel(options); 

En el código anterior, estoy llamando a un método displayListPanel que está disponible en el controlador de ControllerName1. Este método contiene el código para mostrar una vista (un panel de cuadrícula) en la pantalla. Del mismo modo, puedo tener métodos que crean vistas como un nuevo formulario para la entrada de datos. He aquí otro ejemplo:

this.application.getController('ControllerName1').newDateForm(); 

y en mi método:

newDataForm : function() { 

     var view = Ext.widget('form',{title: 'New Data'}); 
     view.show(); 
    }, 
Cuestiones relacionadas