2012-04-12 44 views
0

有沒有辦法將一個複選框和2個數字區域放在一個列中?像ExtJs:網格單元格中的多個表單對象

 
+-----------------------+-----------------------+ 
|  Column 1  |  Column 2  | 
+-----------------------+-----------------------+ 
|      | CB  NF  NF | 
+-----------------------+-----------------------+ 
|      | CB  NF  NF | 
+-----------------------+-----------------------+ 
|      | CB  NF  NF | 
+-----------------------------------------------+ 

回答

3

東西「標準」的方法包括使用功能來編輯的行/列模板,包括與IDS的div,然後渲染組件與renderTo配置這些div。但是,由於您按列而不是按行工作,因此可以採取更簡單的方法。

在你列的配置,使用自定義渲染這樣的:

// May not be exact, I just came up with this on the spot 
renderer: function(value, metaData, record, rowIdx, colIdx, store, view) { 
    return [ 
     "<div id='combobox_", rowIdx, "'></div>", 
     "<div id='numberfield_1_", rowIdx, "'></div>", 
     "<div id='numberfield_2_", rowIdx, "'></div>" 
    ].join(""); 
} 

所以現在在此列中每個單元有三個的div唯一ID(您可能需要更換「rowIdx」與其他一些方法標識,就像record.id)。然後,由您來創建組件並保留它們。

請注意,網格視圖的refresh方法將在每次更新網格時進行調用,包括排序,過濾,隱藏列等。因此,您需要注意事件或其他類似事件,並重新呈現組件如所須。要欺騙渲染的組件進行重新渲染,請使用myComponent.rendered = false; myComponent.render();,它應該可以工作。

人們可能已經編寫了一些插件,可以爲您管理這個過程的很大一部分,但這是一個基本概念。這並不漂亮,但它的工作原理。

+0

謝謝Eric。這有助於很多! – 2012-04-13 11:27:59

+0

我只想到你可以渲染一個單獨的div而不是三個,並創建一個自定義的'Container'類來保存你的三個組件。可能會更快,可能會更容易維護。 – Eric 2012-04-13 13:39:19