我正在阅读此documentation about GXT PropertyAccess。
我正在创建一个包含自定义列的Grid<Stock>
。此列需要一个ValueProvider
,它提供了整个Stock
:
public class MyCustomCol<T> extends ColumnConfig<T, Stock> {
public MyCustomColl(ValueProvider<? super T, Stock> valueProvider, String header) {
...
}
}
如何在GXT
ProperyAccess
中表达它?public interface StockPropertyAccess extends PropertyAccess<Stock>{
@Editor.Path("") //Which Path should I use here? I unsuccessfully tried ""
ValueProvider<Stock, Stock> zis();
ValueProvider<Stock, Integer> id();
ValueProvider<Stock, String> name();
...
}
最佳答案
没有尝试为此生成一个生成的ValueProvider
类型,而是已经存在一种。但首先:您需要一个谈论整个对象的ValueProvider是什么?
这个想法是它为对象的属性提供了一种简单的“反射”,但是没有实际的反射(因为GWT不支持它)。默认情况下,它们是读/写的,允许setValue
和getValue
方法不仅读取值,还可以选择重新写回一些值。
该ValueProvider
界面也可以很容易地手动实现-如果它不知道如何解决问题,则无需从PropertyAccess开始为您完成操作。在谈论对象本身的情况下,您可以只返回原始对象。这是一个(部分实现的)想法:
public class IdentityValueProvider<T> implements ValueProvider<T, T> {
public T getObject(T object) {
return object;
}
public void setValue(T object, T value) {
//can't do anything to set object to a new value, ignore, or throw exception
}
//...
}
此类实际上存在于GXT中,并称为IdentityValueProvider,因为它返回与给定的对象相同的对象(它是“身份函数”)。如果要自定义,可以自己制作,否则,按原样传递它:
ColumnConfig<Stock, Stock> column =
new ColumnConfig<Stock, Stock>(new IdentityValueProvider<Stock>());
在您的评论之一中,您进一步阐明需要从完整对象中打印出
id + "-" + name
,因此理想情况下,您只想返回该字符串?可能看起来像这样:public class IdAndNameStringProvider implements ValueProvider<Stock, String> {
public String getValue(Stock object) {
return object.getId() + "-" + object.getName();
}
//...
}