下拉菜单 window 无法在自定义过滤的 GXT 组合框上打开
Dropdown window does not open on custom filtered GXT combobox
我想过滤 GXT ComboBox Store。例如,如果我在组合框中键入 'st',我希望组合框仅显示包含 'st'
的值
这是我的实现
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);
此过滤器有效并显示正确的值,但组合框的下拉列表不会自动打开。我必须手动单击组合框才能打开下拉列表并查看过滤后的结果。我正在使用 GXT 3.1.0 和 GWT 2.7.0
我尝试使用 combo.expand();
功能,但它没有打开下拉列表。
如有任何帮助,我们将不胜感激。
我找到了解决方案。以下是如何将自定义过滤器添加到 GXT(版本 3.1.0)ComboBox
的示例
1) 创建 class 扩展 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)初始化自定义列表存储并实现filter方法
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并添加Key up handler
ComboBox<SampleDTO> comboBox = new ComboBox<SampleDTO>(store, label);
comboBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
store.setUserText(comboBox.getText());
}
});
完成。现在 ComboBox 将根据用户输入过滤商店并自动打开下拉菜单 window
我想过滤 GXT ComboBox Store。例如,如果我在组合框中键入 'st',我希望组合框仅显示包含 'st'
的值这是我的实现
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);
此过滤器有效并显示正确的值,但组合框的下拉列表不会自动打开。我必须手动单击组合框才能打开下拉列表并查看过滤后的结果。我正在使用 GXT 3.1.0 和 GWT 2.7.0
我尝试使用 combo.expand();
功能,但它没有打开下拉列表。
如有任何帮助,我们将不胜感激。
我找到了解决方案。以下是如何将自定义过滤器添加到 GXT(版本 3.1.0)ComboBox
的示例1) 创建 class 扩展 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)初始化自定义列表存储并实现filter方法
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并添加Key up handler
ComboBox<SampleDTO> comboBox = new ComboBox<SampleDTO>(store, label);
comboBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
store.setUserText(comboBox.getText());
}
});
完成。现在 ComboBox 将根据用户输入过滤商店并自动打开下拉菜单 window