2011-11-23 21 views
7

Ho esaminato molti esempi di ExtJS 4 MVC e praticamente tutti mostrano la stessa cosa: l'applicazione crea un viewport, carica in una vista e ha un 'controller' definito, che init è il controller:ExtJS 4 come creare e visualizzare un nuovo controller/vista da un altro controller/vista?

Ext.application({ 
    name: 'AM', 

    controllers: [ 
     'Users' 
    ], 

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

Questo è ottimo, ma ora diciamo che nella mia applicazione voglio un pulsante contenuto nella mia vista per aprire un controller/vista completamente nuovo, come si fa?

Penso che quello che sto cercando è un modo per dire qualcosa di simile: - Crea Controller (gestito è il codice init) - nel codice del controller init, creare la vista e visualizzarlo

È quello corretto e come lo fai?

Desidero chiarire che nel mio caso avrei bisogno di DUE singole istanze della combinazione SAME controller/view. Ad esempio, potrei avere una vista con un pannello a schede e due schede. Quindi voglio inserire DUE istanze separate di un controller 'Utenti' e una vista 'Utente.lista' all'interno di ciascuna scheda.

risposta

2

Basta controllare la documentazione del nuovo controller e visualizzare le classi.

Mi sembra che sia sempre possibile trovare la vista necessaria quando ne hai bisogno. Per esempio si può:

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

controllare questo e vista di classe metodi:

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

8

Penso che quello che sto cercando è un modo per dire qualcosa del tipo: - Creare Controller (eseguire il suo codice init) - nel codice init del controller, creare la vista e visualizzarla

In extjs, all contr gli oller vengono istanziati quando l'applicazione viene caricata. È possibile utilizzare il metodo di lancio nella classe Application per avviare una visualizzazione. E avere un controller per ascoltare gli eventi di quella vista. In un controllore, è sempre possibile accedere l'altro controller utilizzando l'oggetto application:

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

Nel codice di cui sopra, sto chiamando un metodo displayListPanel che è disponibile in regolatore ControllerName1. Questo metodo contiene il codice per visualizzare una vista (un pannello della griglia) sullo schermo. Allo stesso modo, posso avere metodi che creano viste come un nuovo modulo per l'inserimento dei dati. Ecco un altro esempio:

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

e nel mio metodo:

newDataForm : function() { 

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