2016-02-17 5 views
1

Я хочу фильтровать GXT ComboBox Store. например, если я типа «St» в выпадающем списке я хочу выпадающий показывать только те значения, которые содержат 'стьОкно выпадающего окна не открывается на пользовательской фильтрации GXT combobox

enter image description here

Вот моя реализация

combo = new ComboBox<MerchantDTO>(store, label); 
    StoreFilter<MerchantDTO> filter = new StoreFilter<MerchantDTO>() { 
     @Override 
     public boolean select(Store<MerchantDTO> store, MerchantDTO parent, MerchantDTO item) { 
     boolean canView = (item.getName() != null && item.getName().toLowerCase().contains(combo.getText().toLowerCase())); 
     return canView; 
    } 
}; 
store.setEnableFilters(true); 
store.addFilter(filter); 

Этот фильтр работает и показывает правильные значения, Но выпадающий список combobox не открывается автоматически. Мне нужно щелкнуть на combobox вручную, чтобы открыть раскрывающийся список и просмотреть отфильтрованные результаты. Я использую GXT 3.1.0 и GWT 2.7.0

Я пробовал использовать функцию combo.expand();, но она не открывала выпадающий список.

Любая помощь будет оценена по достоинству.

ответ

1

Я нашел решение. Ниже приведен пример, как добавить пользовательский фильтр GXT (версия 3.1.0) ComboBox

1) Создать класс, который расширяет ListStore и добавить переменную типа String для пользовательского ввода текста

public abstract class XListStore<M> extends ListStore<M> { 

private String userText; 

public XListStore(ModelKeyProvider<? super M> keyProvider) { 
    super(keyProvider); 
} 

@Override 
protected boolean isFilteredOut(M item) { 
    return filter(item); 
} 

public abstract boolean filter(M item); 

public String getUserText() { 
    return userText; 
} 

public void setUserText(String userText) { 
    this.userText = userText; 
} 
} 

2) Initialize пользовательский список хранить и осуществлять фильтр метод

XListStore<SampleDTO> store = new XListStore<SampleDTO>(new ModelKeyProvider<SampleDTO>() { 
     @Override 
     public String getKey(SampleDTO item) { 
      return item.getId(); 
     } 
    }) { 
     public boolean filter(SampleDTO item) { 
      boolean result = false; 
      //Write you filter logic here 
      return result; 
     } 
    }; 
store.setEnableFilters(true); 

3) Инициализировать ComboBox и добавить обработчик ключа

ComboBox<SampleDTO> comboBox = new ComboBox<SampleDTO>(store, label); 
    comboBox.addKeyUpHandler(new KeyUpHandler() { 
    @Override 
    public void onKeyUp(KeyUpEvent event) { 
     store.setUserText(comboBox.getText()); 
    } 
}); 

Выполнено. Теперь ComboBox будет фильтровать хранилище в соответствии с пользовательским вводом и автоматически откроет окно всплывающего окна