我正在阅读此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不支持它)。默认情况下,它们是读/写的,允许setValuegetValue方法不仅读取值,还可以选择重新写回一些值。

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();
    }
    //...
}

10-05 18:06