2012-06-18 91 views
8

Tengo una función que se describe en uno de mis controladores. La función se encarga de crear un formulario que necesito usar en diferentes casos, desde diferentes puntos de vista. ¿Es posible y cuál es la forma de llamar a esta función desde las vistas que necesito sin agregar el mismo código en cada controlador?ExtJS 4 - cómo llamar a la función desde un controlador determinado en diferentes vistas

Este es el código del controlador donde trato de usar un método de otro controlador:

Ext.define('MY.controller.EventsController', { 
    extend: 'Ext.app.Controller', 
    models: [ 
     'EventsRecord'], 

    stores: [ 
     'Events'], 

    views: [ 
     'EventsGrid'], 
    refs: [{ 
     ref: 'EventsGrid', 
     selector: 'CalendarEvent' 
    }], 

    init: function() { 
     this.control({ 
      'CalendarEvent': { 
       afterEditFinish: this.askForNotify, 
       deleteEvent: this.deleteEvent, 
       calendarEditFunc: this.calendarEditFunc, 
       addCalendarEvent: this.addCalendarEvent, 
       itemclick: this.onSelectEnableBtn 
      } 
     }) 

    }, 

Aquí trato de usar algo como var contr = Ext.getController('SomeController'); and..nothing ..

askForNotify: function(editor, e) {... 

Respuesta

20

Hágalo parte de la clase global con singleton: true y acceda a él desde cualquier lugar de su código. Simplemente llamar a los métodos de los controladores desde las vistas es una especie de paradigma MVC ...

Actualización: Si realmente no puede cambiar el código existente, haga lo siguiente.

Guardar fuera referencia a la aplicación en alguna parte (presumible que haya su aplicación definido algo por el estilo:

Ext.application({ 

    launch: function() { 
     _myAppGlobal = this; 
    } 
}); 

Esta variable se utiliza para obtener el controlador que desee:

_myAppGlobal.getController('MyController'); 
+0

¿No es posible trabajar con 'getController' para llamar a la función? He intentado con' Ext.getC ontroller ('nombre') 'y' this.getController ('nombre') y ambos nos dieron un error 'getController no es una función' pero pensé que este era el camino correcto a seguir. – Leron

+1

getController es un método de la clase Ext.app.Controller, por lo que debe tener una referencia al controlador de su vista actual, lo que de nuevo pienso en MVC :) – sha

+0

De hecho, déjenme explicar: tengo un formulario para notificaciones por correo que debe mostrarse en diferentes ocasiones (desde diferentes puntos de vista, en diferentes eventos) pero la forma se define en un controlador. ¿Cuál cree que es la mejor manera de implementar tal cosa? Obviamente, copiar y pegar el código no es la solución correcta, creo que debería haber una forma adecuada de colocar el código en un lugar y usarlo de muchos, pero no estoy seguro de qué hacer exactamente. – Leron

4

Se puede utilizar esta -

this.getController('Controller Name').someFn(); 
Cuestiones relacionadas