2012-09-21 12 views
7

kontrolör ExtJS dinleyenleri tanımla - bu 'Ana' formu (görünüm) bulunuyor. Bu 'tabpanel'de farklı sekmeleri - xtype' panel 'tanımladım. Yani, bir 'ana' (denetleyici), 'ana' görünüm ve bazı sekme görünümlerim var. Sekmenin görünümlerine 'ana' görünümde başvurulur.Ben 'TabPanel' var

Ben 'Ana' denetleyicisi bazı çocuğun panelinin 'etkin' olayın dinleyici tanımlamak istiyorum. Bunu nasıl yapabilirim?

ana 'kontrol:

Ext.define('KP.controller.account.apartment.Main', { 
    extend: 'Ext.app.Controller', 

    views: ['account.apartment.Main', 
     'account.apartment.Requisites' 
    ], 

    models: ['account.apartment.Requisites' 
    ], 
    stores: ['account.apartment.Requisites' 
    ], 


    init: function() { 

    } 
}); 

ana' görünümü:

Ext.define('KP.view.account.apartment.Main', { 
    extend: 'Ext.window.Window', 
    alias: 'widget.ApartmentData', 

    height: 566, 
    width: 950, 
    activeItem: 0, 
    layout: { 
     type: 'fit' 
    }, 
    autoShow: false, 

    initComponent: function() { 
     var me = this; 

     Ext.applyIf(me, {    
      items: [ 
       { 
        xtype: 'tabpanel', 
        activeTab: 0, 
        deferredRender: true, 

        items: [       

         { 
          xtype: 'RequisitesApartment' 
         } 
        ] 
       } 
      ] 
     }); 

     me.callParent(arguments); 
    } 

}); 

alt paneli RequisitesApartment (görünüm):

Ext.define('KP.view.account.apartment.Requisites', { 
    extend: 'Ext.panel.Panel', 
    alias: 'widget.RequisitesApartment', 


    id: 'panel_accountrequisites', 
    height: 350, 
    width: 1124, 
    autoScroll: true, 
    layout: { 
     type: 'fit' 
    }, 


    listeners: { 
     activate: function() {   
       ....load data.... 
       ...this listeners I want to push in 'main' controller...    
     } 
    }, 

    initComponent: function() { 
     var me = this; 

     var grid_store = Ext.create('KP.store.account.apartment.Requisites'); 

     Ext.applyIf(me, { 
      dockedItems: [ 
       { 
        xtype: 'gridpanel', 
        height: 260, 
        autoScroll: true, 
        dock: 'bottom', 
        store: grid_store, 
        id: 'r_gridFlatParams', 
        forceFit: true, 


        columns: [ 
         ...some columns.... 
        ], 
        viewConfig: { 
       } 
      } 
      ] 
     }); 

     me.callParent(arguments); 
    } 
}); 

cevap

3

Eh, 'Ana' (denetleyici) bu kodu koymalıyız:

this.control({ 
     'ApartmentData tabpanel RequisitesApartment': { 
      activate: function() { 
       console.log('hello!');     
      } 
     } 
    }); 

sorun yanlış seçicisi oldu, ben kullanılan. Orada

'ApartmentData tabpanel RequisitesApartment' 

'ApartmentData' (a alias: 'widget.ApartmentData' gibi tanımlanmış) - 'pencere' -the ana form xtype olup: doğru seçici olduğunu. TabPanel - '' penceresinde tırnaklarla panel ve 'apartServList' ( alias: 'widget.RequisitesApartment' gibi tanımlanmış) - bir paneli. sra için

teşekkürler!

+2

Eh, 'apartServList' sizin örnek kodda bulunamaz Yani ben Bu doğru cevap neden başkalarını izlemek için biraz zor olacaktır. Ben dahil. Belki sorunuzu düzenleyebilirsin. – sra

+0

Lütfen dikkat edin, örneğim sizi sekmeye değil, sekme düğmesine işaret eder. Bildiğim kadarıyla, sekmenin etkinleştirme olayını panele kapılmasın, değil mi? – sra

+0

Cevabımı düzenledim, 'panel' xtype 'etkin' etkinliğe sahip. – Oleg

7

olarak doğrudan siteye Sorumlu kontrolörde controlİşte bir çalışma sorgu ile bir örnektir. Tabii ki, sadece sorguya ihtiyacınız olacak, ama bence bu iyi bir örnek. Özel cfg özellik kimliği, her sekmeyi bulmayı kolaylaştırır. Aşağıdaki örnekte olduğu gibi, her bir panelde bir tabConfig belirtecek ve orada kimliği tanımlayacaksınız.

Ext.create('Ext.tab.Panel', { 
    width: 400, 
    height: 400, 
    renderTo: document.body, 
    items: [{ 
     title: 'Foo', 
     tabConfig: { 
      ident: 'foo' 
     }, 
    }, { 
     title: 'Bar', 
     tabConfig: { 
      ident: 'bar', 
      title: 'Custom Title', 
      tooltip: 'A button tooltip' 
     } 
    }] 
}); 

console.log(Ext.ComponentQuery.query('tabpanel tabbar tab[ident=foo]')[0]); 
console.log(Ext.ComponentQuery.query('tabpanel tabbar tab[ident=bar]')[0]); 

başka yolu da '#my-name' gibi sorgulanabilir css id kullanmaktır ama ben bir yapılandırma nesnesi geçirmek için yapmanız

+0

@Oleg edit done. Bu örnekle, her bir sekmeye – sra

+0

erişimini doğrudan yönlendirirsiniz.Kontrol ({ 'ApartmentData TabPanel TabBar sekmesi [identi = ece]': { etkinleştirme: fonksiyonu (ızgara) { console.log ('parampampam'); } } }); - Ama işe yaramıyor ( – Oleg

+0

@Oleg First; küçük harflerle ve sadece camelcase'deki sınıf isimlerini yazmalısınız. İkinci olarak, xtype: 'RequisitesApartment' ile birlikte bir tabConfig uyguladınız mı? Yukarıdaki örnek bir kopyaya kopyalanabilir. . Sencha API – sra

0

doğru şey yukarıdaki örnekte olduğu gibi özel bir yumuşatma Kullanmak tavsiye üye işlev kontrol kontroliçine init işlevi. Sencha belgelerinden: Denetim işlevi, görünüm sınıflarınızdaki olayları dinlemenizi ve işleyici işleviyle biraz harekete geçmenizi kolaylaştırır. düz extjs dokümanlardan

Hızlı bir örnek

: Bu yardımcı olur

Ext.define('MyApp.controller.Users', { 
extend: 'Ext.app.Controller', 

init: function() { 
    this.control({ 
     'viewport > panel': { 
      render: this.onPanelRendered 
     } 
    }); 
}, 

onPanelRendered: function() { 
    console.log('The panel was rendered'); 
} 
}); 

Umut. Şerefe

+0

içinde örnek kod alanlarının biz denetleyici dosyası içinde bir mağaza için birden dinleyici ekleyebilirsiniz nasıl var ps = this.getMyStore(); ps.on ({ \t beforesync:? this.beforesync, \t finishupdate: this.finishupdate, \t finishedWriting: this.finishedWriting, kapsamı:. Bu }); – aswininayak