2013-05-07 3 views
0

Важное изменение: я добавил уровень глубины в ситуацию, чтобы лучше отразить мою проблему.Пользовательский фильтр объекта для столбца сетки в sencha GXT

У меня есть сетка GXT с ListStore определенного типа Foo. Foo имеет некоторые важные свойства объекта, включая один из типов Bar. Тип Bar состоит из двух свойств объекта: fooFoo типа FooFoo и barBar типа Barbar. Эти два могут быть null и иметь String объект description.

sketch

Я хочу использовать фильтрацию в GXT сетке, чтобы фильтровать Foo объект записи по FooFoo или BarBar описание их Bar-значения.

Я пытался добавить ValueProvider<Foo, String> barDescription(); к FooProperties, в результате чего:

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

В которойFoo#getBarBarDescription()реализуется следующим образом:

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

Есть простой/удобный способ реализовать это поведение в GXT? Я этого не нашел.

Реализация, описанная выше, является той, которую я пробовал, но фильтры вообще не отображаются в сетке, никаких дополнительных сообщений об ошибках.

В ответ на ответ Колина к предыдущей версии моего вопроса, я попытался следующие:

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

Надеясь на это, чтобы позвонить Foo#getBar().getBarBar().getDescription(). Я подозреваю, что FooFoo и BarBar могут быть null могут вызывать проблемы.

+0

Как вы понимаете, вы делаете это правильно, и нет другого простого способа. – sanbhat

ответ

1

Если вы хотите иметь barDescription() Invoke getBar().getDescription() на ваши Foo объектов, то попробуйте следующее:

public interface FooProperties extends PropertyAccess<Foo> { 

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

    //... 
} 

@Path аннотации работают здесь же, как это делает в рамках редакторов - вы можете использовать его, чтобы указать путь к собственности, к которой вы хотите получить доступ. Это позволяет пропустить создание метода getBarDescription() в вашем собственном Foo объекте.

Другой вариант - просто создать свою собственную реализацию 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

Спасибо за помощь Колин. К сожалению, я забыл упомянуть один уровень глубины в моем первоначальном вопросе. Сначала это казалось тривиальным, но поскольку использование предоставленного вами ответа, похоже, не работает (см. Вопрос), я думал, что поставлю дополнительную информацию. –

+0

Правильно, null - проблема (так как должна быть строка, если Бар был нулевым?) - Я внесу изменения в вопрос, чтобы попытаться решить некоторые параметры, которые у вас есть. –

+0

То есть, я внес изменения в * ответ *. –

Смежные вопросы