2012-06-18 6 views
8

Mam funkcję opisaną w jednym z moich kontrolerów. Ta funkcja zajmuje się tworzeniem formularza, którego potrzebuję użyć w różnych przypadkach, z różnych widoków. Czy jest to możliwe i jaki jest sposób wywołania tej funkcji z widoków, których potrzebuję, bez dodawania tego samego kodu do każdego kontrolera.ExtJS 4 - jak wywołać funkcję z określonego kontrolera w różnych widokach

Oto kod sterownika, gdzie staram się stosować metodę z innego kontrolera:

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

    }, 

Tutaj staram się użyć czegoś jak var contr = Ext.getController('SomeController'); and..nothing ..

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

Odpowiedz

20

Zrób to z globalnej klasy z singleton: true i uzyskaj do niego dostęp z dowolnego miejsca w kodzie. Po prostu wywołanie metod kontrolerów z widoków jest sprzeczne z paradygmatem MVC ...

Aktualizacja: Jeśli naprawdę nie możesz zmienić istniejącego kodu - wykonaj następujące czynności.

Zapisz się odniesienie do aplikacji gdzieś (przypuszczalną masz aplikacji zdefiniowano coś takiego:

Ext.application({ 

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

Użyj tej zmiennej aby uzyskać sterownik chcesz:

_myAppGlobal.getController('MyController'); 
+0

Nie można pracować z 'getController', aby wywołać funkcję? Próbowałem już z' Ext.getC ontroller ('name') 'i' this.getController ('name') i oba dały mi błąd "getController nie jest funkcją", ale pomyślałem, że to jest właściwa droga. – Leron

+1

getController jest metodą z klasy Ext.app.Controller, więc musisz mieć odwołanie do kontrolera obecnego widoku - co jest znowu myślę przeciwko MVC :) – sha

+0

W rzeczywistości pozwól mi wyjaśnić -Mam formularz dla powiadomień mailowych, które powinny być pokazywane przy różnych okazjach (z różnych widoków, różnych zdarzeń), ale formularz jest zdefiniowany w jednym kontrolerze. Co uważasz za najlepszy sposób na wdrożenie takiej rzeczy. Oczywiście skopiowanie kodu jest niewłaściwe, myślę, że powinien istnieć właściwy sposób umieszczenia kodu w jednym miejscu i używania go od wielu osób, ale nie jestem pewien co dokładnie zrobić? – Leron

4

Można to wykorzystać -

this.getController('Controller Name').someFn(); 
Powiązane problemy