2013-05-07 82 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