2012-06-18 13 views
8

Denetleyicilerimden birinde açıklanan bir işlev var. İşlev, farklı durumlarda, farklı görünümlerden kullanmam gereken bir form oluşturmaya özen gösterir. Mümkün ve bu işlevi her denetleyicide aynı kodu eklemeden ihtiyaç duyduğum görünümlerden çağırmanın yolu nedir? İşte ExtJS 4 - farklı görünümlerde belirli bir denetleyiciden işlev çağırma

diğer denetleyicisinden bir yöntem kullanmayı deneyin kumandanın kodudur:

İşte
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 
      } 
     }) 

    }, 

Ben var contr = Ext.getController('SomeController'); and..nothing gibi bir şey kullanmayı deneyin ..

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

cevap

20

singleton: true ile küresel sınıfın bir parçası olun ve kodunuzdaki herhangi bir yerden erişin. Sadece kontrolörlerin metotlarını görüşlerden çağırmak MVC paradigmasına karşıdır ...

Güncelleme: Eğer mevcut kodu gerçekten değiştiremezseniz - aşağıdakileri yapın. bir yere uygulamanızda böyle (tahminen başvurunuzun tanımladığınız şey için

kaydet kapalı referansı:

Ext.application({ 

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

kullanın bu değişken denetleyicisi almak istediğiniz:

_myAppGlobal.getController('MyController'); 
+0

Fonksiyonu çağırmak için 'getController' ile çalışmak mümkün değil mi?' Ext.getC ile denedim ontroller ('isim') 've' this.getController ('isim') ve her ikisi de bana bir hata verdi 'getController bir fonksiyon değil' ama bunun doğru yol olduğunu düşündüm. – Leron

+1

getController, Ext.app.Controller sınıfından bir yöntemdir, bu yüzden şu anki görüşünüzün denetleyicisine bir başvuru yapmanız gerekir - bu da yine MVC'ye karşı düşünüyorum :) – sha

+0

Aslında açıklamama izin ver - Posta bildirimleri için bir formum var Farklı durumlarda (farklı olaylardan, farklı olaylarda) gösterilmelidir, ancak form bir kontrolörde tanımlanmıştır. Ne düşünüyorsun böyle bir şeyi uygulamak için en iyi yol. Açıkçası kod kopyalayıp yapıştırmak doğru bir çözüm değil, bence kodu tek bir yere yerleştirmek için uygun bir yol olmalı ve bunu çoktan kullanmalıyım ama tam olarak ne yapacağımı bilemiyorum? – Leron

4

Bu kullanabilirsiniz -

this.getController('Controller Name').someFn(); 
İlgili konular