2016-07-05 45 views
0

我想用dgrid(和dojo)創建一個PropertyGrid。據我所見,單個列可能只包含一個編輯器類型。是否有任何解決方法可以爲同一行中的不同單元格提供不同的編輯器控件?PropertyGrid和dgrid一樣

編輯器mixin似乎爲每行創建一個單獨的緩存編輯器控件,但也許有一些我錯過了。

非常感謝!

回答

0

沒有可用的mixin來實現所描述的功能。但是,你可以做兩件事中的一件。

1)取決於使用編輯器,您可以使用列中的renderCell函數根據列值/行數據返回不同的輸入/小部件。在這種情況下,您需要處理事件並更新商店。

2)如果你仍然想使用編輯器,有一個解決方法。通過使用dojo/aspect。您需要監聽網格的insertRow方法。並使用適當的窗口元素更新單元格。以下是相同的摘錄。

aspect.after(grid, "insertRow", lang.hitch(this, 'updateRowWidgets')); 

function updateRowWidgets(rowElement){ 
    var cell = grid.cell(rowElement, <columnid>); 
    var rowdata = cell.row.data; 

    var rowWidget = .... //Create your widget according to row data. 
    cell.element.widget = rowWidget; 

    return rowElement; // remember to return this. 
} 

希望這有幫助。

更新:第二個選項只能與editOn一起使用,因爲在editOn事件之後,小部件將顯示/添加到網格中,並且您將能夠在發生此情況之前切換小部件。否則,在insertRow完成之前,小部件將被添加到網格中。

+0

謝謝,第一個選項似乎是最有前途的,但由於我一直卡住,我嘗試了第二個選項。在updateRowWidgets中,cell.element是未定義的。任何想法出了什麼問題? – thomas

+0

cell.element不能是未定義的,因爲它是單元的節點。可以有兩種可能性,它可以是未定義的。 1)細胞尚未生成。 2)作爲參數傳遞的columnid是錯誤的。 –