2014-06-05 37 views
0

我需要將列添加到GXT網格中。我可以這樣做,但是當我想輸入行數據時會出現問題。事情是,並不是所有的行都有特定的列。所以我想要實現的是檢查給定的行是否有特定的列並返回適當的值。GXT ValueProvider動態值

問題是,我的列的ValueProvider不允許在其方法中使用參數。所以我無法將列名傳遞給ValueProvider,因此它可以檢查給定列是否存在於特定行中並返回適當的數據。

這裏是我的專欄:

ColumnConfig<SomeClass, String> column = new ColumnConfig<SomeClass, String> (props.attributeValue(name), 150, name); 

這裏是我的ValueProvider

ValueProvider<LimitDTO, String> attributeValue(String name); 

這裏是我的實現(簡體):

public String getAttributeValue(String name) { 
    if(this.attributes.get(name) == null) { 
     return ""; 
    } else { 
     return this.attributes.get(name); 
    } 
} 

,但我得到建立自己的錯誤:

Method public abstract com.sencha.gxt.core.client.ValueProvider<com.example.SomeClass, java.lang.String> attributeValue(java.lang.String s) must not have parameters 

SOLUTION

感謝您的回答,我能夠做到這一點。這是我的ValueProvider實現,以防有人尋找解決方案。這是不是很難畢竟:)

public class CustomValueProvider implements ValueProvider<SomeClass, String> { 

    public String column; 

    public CustomValueProvider(String column) { 
     this.column = column; 
    } 

    @Override 
    public String getValue(SomeClass object) { 
     if(object.getAttributes().get(column) == null) { 
      return ""; 
     } else { 
      return object.getAttributes().get(column); 
     } 
    } 

    @Override 
    public void setValue(SomeClass object, String value) { 
    } 

    @Override 
    public String getPath() { 
     return column.getName(); 
    } 

} 

這裏是我如何使用它

LimitsValueProvider lvp = new LimitsValueProvider(name); 
ColumnConfig<SomeClass, String> newColumn = new ColumnConfig<>(lvp, 150, name); 

非常感謝!

+0

看一看[here](http://www.sencha.com/forum/showthread.php?249066-Dynamic-value-provider)。也許這有幫助。 – Jens

+0

謝謝!我更新瞭解決方案的帖子 –

回答

0

我建議,不要使用

props.attributeValue(name) 

相反,你可以按照崗位Dynamic charts in GXT 3,你可以創建自己的動態值提供商(參見區間值提供者),這將需要ColumnID的(路徑)作爲輸入並執行相同的功能。

還記得ValueProvider只是一個接口,並使用GWT.create你提供了它的默認實現。

+0

謝謝!我用解決方案更新了我的帖子。這個例子真的幫了我 –