ExtJS 4 – come funzione di chiamata da un certo controller in diverse viste

Ho una funzione che è descritto in un mio controller. La funzione prende cura della creazione di un modulo che ho bisogno di usare in diversi casi, da diversi punti di vista. È possibile e cosa non è il modo per chiamare questa funzione da la vista di cui ho bisogno, senza l’aggiunta di codice stesso in ogni controller.

Qui è il codice del controller dove cerco di utilizzare un metodo da altri controller:

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
            }
        })

    },

Qui di seguito cerco di usare qualcosa come var contr = Ext.getController('SomeController');e..niente..

askForNotify: function(editor, e) {...
InformationsquelleAutor Leron | 2012-06-18

 

2 Replies
  1. 20

    Far parte della classe globale con singleton: true e accedere da qualsiasi parte del codice. Basta chiamare controller metodi da punti di vista è una specie di contro MVC…

    Aggiornamento: Se davvero non si può modificare il codice esistente – effettuare le seguenti operazioni.

    Salvare off di riferimento per la tua app da qualche parte (presumibilmente la propria applicazione definito qualcosa di simile:

    Ext.application({
    
       launch: function() {
          _myAppGlobal = this;
       }
    });

    Utilizzare questa variabile per ottenere il controller che si desidera:

    _myAppGlobal.getController('MyController');
    • Non è possibile lavorare con getController per chiamare la funzione? Ho provato con Ext.getController('name') e this.getController('name') and both gave me a mistake getController non è una funzione”, ma ho pensato che questa è la strada giusta da percorrere.
    • getController è un metodo da Ext.app.Classe Controller, quindi è necessario avere un punto di riferimento per la vista corrente del controller – che è di nuovo penso che contro MVC 🙂
    • In effetti mi spiego: ho un form per le notifiche di posta che deve essere presentato in diverse occasioni (da diversi punti di vista, su eventi diversi) ma la forma è definita in un controller. Che cosa yo pensare è il modo migliore per implementare una cosa del genere. Ovviamente copia-incollare il codice non è la soluzione giusta, penso che ci dovrebbe essere un modo corretto di inserire il codice in un unico luogo e la uso da molti, ma non sono sicuro di cosa esattamente fare?
    • Perché non si può solo creare una vista da luoghi diversi? Codice del Controller riprende automaticamente.
    • Non c’è bisogno di creare un controller di istanze manualmente. Che è stato creato con l’app di classe.
    • Io non sono esattamente sicuro di quello che vuoi dire, ma ho una funzione che viene utilizzata per creare l’intera forma e funzioni di chiamata premendo un pulsante, e il codice è nel controller. Ho un pò di avere a che fare con questo, perché è il loro lavoro e il mio compito è quello di trovare un modo per chiamare questa funzione *che aactually crea l’editor) da tutto il mondo.
    • Grazie, non so perché si continua a dire che getController is not a function. getStore e getView funziona bene, immagino che mi manca qualcosa.
    • ma che stai ricevendo istanza di applicazione?
    • Scusa credo di non ottenere l’intera idea. I\ll post le parti più significative del mio cono in argomento principale. Se è possibile si prega di scegliere i miei errori, Pensa che io non devo provare questo al controller per iniziare con ma…vedere il codice…
    • cerchiamo di continuare questa discussione in chat
    • Probabilmente vale la pena l’aggiornamento di questa risposta. 4.2.x, l’app viene impostato automaticamente ed è possibile accedervi utilizzando MyApp.app.

Lascia un commento