2013-05-07 83 views
0

重要编辑:我在情境中添加了深度级别以更好地反映我的问题。sencha网格列的自定义对象过滤器GXT

我有一个GXT网格与某种类型的一个ListStore FooFoo恰好具有一些重要的对象属性,其中包括Bar类型之一。类型Bar由两个对象属性组成:fooFoo类型FooFoobarBar类型Barbar。这两个可以是null并具有String属性description

sketch

我想使用GXT网格的过滤通过Bar值的FooFooBarBar描述过滤Foo对象记录。

我尝试添加ValueProvider<Foo, String> barDescription();FooProperties,导致:

public String getBarBarDescription() { 
    return this.getBar().getBarBar().getDescription(); 
} 

有一个简单/便捷的方式:

StringFilter<Foo> barbarFilter = new StringFilter<Foo>(fooProps.barbarDescription()); 

在这Foo#getBarBarDescription()执行如下在GXT中实现这种行为?我没有找到它。

我上面描述的实现是我尝试过的实现,但过滤器根本不显示在网格中,没有其他错误消息。

为响应科林的回答到以前的版本我的问题,我已经试过如下:

@Path("bar.barbar.description") 
ValueProvider<Foo, String> barbarDescription(); 

盼望它打电话Foo#getBar().getBarBar().getDescription()。我怀疑FooFoo和BarBar的可能性为null可能会导致问题。

+0

按照我的说法,你做对了,没有其他简单的方法。 – sanbhat 2013-05-07 14:06:36

回答

1

如果你想有barDescription()调用getBar().getDescription()Foo对象,那么试试这个:

public interface FooProperties extends PropertyAccess<Foo> { 

    @Path("bar.description") 
    ValueProvider<Foo, String> barDescription(); 

    //... 
} 

@Path注释在这里工作一样,它在编辑器框架做 - 你可以用它来指定您想要访问的属性的路径。这使您可以跳过在您自己的Foo对象中创建getBarDescription()方法。

另一种选择是建立自己的ValueProvider实现。使用PropertyAccess是一种让编译器为你完成工作的方法,但是没有什么能阻止你自己做这件事。在这种情况下,它可能是这样的:

public class FooBarDescriptionValueProvider implements ValueProvider<Foo, String> { 
    public String getValue(Foo object) { 
    //TOOD consider a object.getBar() null check? 
    return object.getBar().getDescription(); 
    } 
    public void setValue(Foo object, String value) { 
    object.getBar().setDescription(value); 
    } 
    public String getPath() { 
    return "bar.description"; 
    } 
} 

注意,这是几乎正是PropertyAccess生成的版本看起来像,但它允许,但是你想你自定义的行为。

+0

感谢您的帮助科林。不幸的是,我忘了在我原来的问题中提到一个深度级别。起初它似乎微不足道,但由于使用您提供的答案似乎不起作用(请参阅问题),我想我会提供额外的信息。 – 2013-05-08 10:04:45

+0

Right,null是一个问题(因为如果Bar为空,该字符串应该是什么?) - 我将对该问题进行更改以尝试解决您拥有的某些选项。 – 2013-05-08 13:53:37

+0

也就是说,我将对*答案*进行更改。 – 2013-05-08 15:26:04