2011-04-06 96 views
3

我有點困惑通過對EditorGrid下列文件:ExtJS的EditorGridPanel和列渲染

編輯是由列的 dataIndex後備存儲器中(指定的 字段值進行所以如果你使用 渲染器以 顯示轉換後的數據,這個必須是 佔)。

我真的不知道如何「帳戶」我在下列情況下渲染:

... 

columns : [{ 
       header : 'Foo', 
       width : 100, 
       dataIndex: 'foo', 
       renderer: function(value, p, record) {return value? value.bar: ""}, 
       editor : new Ext.form.TextField({ 
        allowBlank : false 
       }) 
      }] 
... 

正如你所看到的,渲染是一個非常簡單的,但是這顯然不是將與TextField一起工作。我明白爲什麼當用戶編輯時它只顯示我的foo對象而不顯示bar屬性。

那麼如何解決這個問題呢?我是否應該用新的setValuegetValue來覆蓋Ext.form.TextField?我想過使用事件beforeeditafteredit,但這似乎是矯枉過正。我覺得我在這裏錯過了很簡單的事情。

在情況下,我沒有說清楚,這裏的結果我得到的幾個屏幕:

列渲染的作品!
yay renderer

Ext.form.TextField得到一個對象
booo textfield

回答

1

如果你想改變如何列顯示value你必須改變列渲染器和編輯器來反映這一點。這意味着,是的,您必須在編輯事件之前和之後收聽並採取行動。

(例如,如果您想一想,例如我將7更改爲9.系統將如何知道如何處理此9,因爲您的值是完全不同的格式,實際上是一個對象。轉換的唯一方法是將9並將其轉換回您想要的任何對象,這意味着在編輯和推送之前/之後聆聽,將編輯器中的值從備份記錄中拉出/取出。)

+0

這對於我。我想我不確定我在前後會發生什麼變化。我如何訪問編輯器?我有「event.grid」和「event.record」,所以我猜它是在網格的某個地方:)。 – Stephano 2011-04-06 19:22:12

+0

似乎應該有一個更簡單的方法來做到這一點,因爲我的數據轉換非常簡單。 – Stephano 2011-04-06 19:37:30

+0

我認爲這是正確的,但說實話,我沒有看到這樣做的好方法。我覆蓋了startEditing方法,然後在事件發生後我改回了事情。這是馬虎。我猜測這樣做的真正方法是編寫一個Ext.form.Field的擴展,它能正確顯示你的對象,並以某種方式允許正確編輯。 – Stephano 2011-04-06 20:08:03