2011-07-14 19 views
9

Tôi có nhiều fieldset. Và có nút bên trong mỗi fieldset trong Extjs 4. Tôi muốn nhận id fieldset trên sự kiện click button, để tôi có thể biết từ đó fieldset nút được nhấp vàoExtjs 4 Làm cách nào để lấy id của Component cha?

Làm cách nào để có được điều này?

{ 
    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. 
     } 
    }] 
    } 

Cảm ơn, 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 
} ] 
}); 

và tôi đang gọi chức năng này trên nút bấm

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

tôi muốn truy cập id fieldset thông qua nút. bởi vì tôi có nhiều fieldset. Và tôi muốn thêm somthing vào một fieldset cụ thể mà từ đó button được click. – Kunal

Trả lời

22

Tôi đã triển khai trình xử lý đúng cách.

 
{ 
    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(); 
     } 
    }] 
} 

Trong trường hợp đó thử điều này:

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

+0

Vâng, 'Ext.AbstracComponnent.up()' sử dụng một cách khác để tìm kiếm các thành phần cao hơn trong cấu trúc phân cấp. Tôi tự hỏi nếu điều đó sẽ làm việc trong khi 'findParentByType' thì không. – Mchl

+0

Chắc chắn, nó hoạt động, tôi đã thử nghiệm nó và tôi đang sử dụng nó trong khi tôi phát triển trong ExtJs4 – Zango

+0

Đó là tuyệt vời. Tôi đã thử nghiệm mã trong câu trả lời của tôi, và nó hoạt động, và tôi cũng đang sử dụng nó trong công việc của tôi, nhưng Kunal có một số rắc rối với nó. – 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 
    }); 
}); 

Thông báo, rằng một khi bạn có fieldset biến, bạn thực sự có thể thêm các mục vào vùng chứa này trực tiếp, mà không cần sử dụng ID của nó

+0

tôi đã thử điều này nhưng tôi đã nhận được lỗi sau. Uncaught TypeError: Không thể gọi phương thức 'getId' của undefined – Kunal

+0

Đó là một chút lạ. Tôi đã cập nhật mã ở trên. Bạn cũng có thể thử với 'findParentByType ('container')'. – Mchl

+0

Lỗi hiển thị rằng fieldset không được xác định, do đó nó không hoạt động. tôi cũng đã thử với container nhưng trong trường hợp đó tôi có id của Panel, trong đó tôi đã thêm các fieldets. – Kunal

Các vấn đề liên quan