2011-07-14 10 views
9

Ho più fieldset. E hanno Button all'interno di ogni fieldset in ExtJS 4. voglio arrivare fieldset id sull'evento click pulsante, in modo che io possa sapere da cui FIELDSET il pulsante è stato cliccatoExtjs 4 Come ottenere l'id del componente principale?

Come faccio ad avere questo?

{ 
    xtype:'fieldset', 
    id:'fs1', 
    items:[{ 
    xtype:'button', 
    id:'b1', 
    handler:function(){ 
     // here i want to get fieldset's id because because fieldset and button were added dynamically. 
     } 
    }] 
    } 

Grazie, Kunal

Actual Code: 

    Ext.define('My.Group',{ 
xtype : 'fieldset', 
config: { 
    title:'Group' + i.toString(), 
    id : '_group' + i.toString()  
}, 
    constructor: function(config) { 
    this.initConfig(config); 

    return this; 
}, 

collapsible : true, 
frame : false, 
boder : false, 
items : [ { 
xtype : 'button', 
text : 'Add KeyWord', 
id: 'btn', 
width : 100, 
handler : function(button,event) { 

    var fieldset = button.findParentByType('fieldset'); 
    var fieldsetsID = fieldset.getId(); 

    console.log(fieldset); 

    Ext.getCmp(fieldsetId).insert(2, rangeField); 
    Ext.getCmp(fieldsetsID).doLayout(); 
} 

}, { 
xtype : 'button', 
text : 'Add Range Type', 
width : 100 
} ] 
}); 

e sto chiamando questa funzione scatto del tasto

handler : function() { 
     i=i+1; 
     var group = new My.Group({ 
      title:'Group' + i.toString(), 
      id : '_group' + i.toString()     
     }); 

     console.log(group); 
     Ext.getCmp('_aspanel').insert(i, group);     
     Ext.getCmp('_aspanel').doLayout(); 
+0

voglio accedere id fieldset tramite il pulsante. perché ho più fieldset. E voglio aggiungere qualcosa in un particolare fieldset da cui è stato fatto clic sul pulsante. – Kunal

risposta

22

Ho implementato correttamente il gestore .

 
{ 
    xtype:'fieldset', 
    id:'fs1', 
    items:[{ 
     xtype:'button', 
     id:'b1', 
     handler:function(btn){ 
      // Retrieve fieldset. 
      var fieldset = btn.up('fieldset'); 
      // Retrieve Id of fieldset. 
      var fieldsetId = fieldset.getId(); 
     } 
    }] 
} 

In questo caso provare questo:

 
button.up("[xtype='fieldset']") 

+0

Sì, 'Ext.AbstracComponnent.up()' utilizza un modo diverso per cercare i componenti più in alto nella gerarchia. Mi chiedo se funzionerebbe mentre 'findParentByType' no. – Mchl

+0

Certo, funziona, l'ho provato e lo sto usando mentre lo sviluppo in ExtJs4 – Zango

+0

È grandioso. Ho provato il codice nella mia risposta, e funziona, e lo sto usando anche nel mio lavoro, tuttavia Kunal ha qualche problema con esso. – Mchl

5
Ext.onReady(function() { 
    var panel = Ext.create('Ext.panel.Panel', { 
     items: { 
     xtype:'fieldset', 
     id:'fs1', 
     items:[{ 
      xtype:'button', 
      id:'b1', 
      handler:function(b,e){ 
      var fieldset = b.findParentByType('fieldset'); 
      var fieldsetID = fieldset.getId(); 
      console.log(fieldsetID); 
      } 
     }] 
     }, 
     renderTo: document.body 
    }); 
}); 

avviso, che una volta che hai fieldset variabile, si può effettivamente aggiungere elementi a questo contenitore direttamente, senza necessità di utilizzare il suo ID

+0

ho provato questo ma ho ottenuto l'errore seguente. Uncaught TypeError: impossibile chiamare il metodo 'getId' di undefined – Kunal

+0

Questo è un po 'strano. Ho aggiornato il codice sopra. Puoi anche provare con 'findParentByType ('container')'. – Mchl

+0

L'errore sta mostrando che fieldset non è definito, quindi non funziona. ho anche provato con container ma in quel caso ho l'id di Panel in cui ho aggiunto i fieldset. – Kunal

Problemi correlati