我想仅在用户至少键入3个字符时才搜索我的树。 我如何抓住“doSelect”事件来做到这一点? 如果我在文本字段上添加keylistener来检查其值,则在doSelect之后调用该处理程序。 任何人都可以帮助我吗?
这是一个例子......
filterText = new StoreFilterField<ModelData>() {
@Override
protected boolean doSelect(Store<ModelData> store,
ModelData parent, ModelData record, String property,
String filter) {
String name = record.get("name");
name = name.toLowerCase();
if (name.startsWith(filter.toLowerCase()))
return true;
else
return false;
}
};
KeyListener keyListener = new KeyListener() {
public void componentKeyUp(ComponentEvent event) {
loadingImage.setVisible(false);
if(filterText.isValid() && filterText.getRawValue().length()>=FILTER_MIN_SIZE) {
filterText.bind(store);
} else {
filterText.unbind(store);
}
}
};
filterText.setMinLength(FILTER_MIN_SIZE);
filterText.bind(store);
答案 0 :(得分:0)
(似乎是GXT 2,如果您实际使用的是GXT 3,请告诉我)
StoreFilterField
依靠applyFilters
方法实际应用所有这些方法。它已经检查了文本至少有一个字符:
protected void applyFilters(Store<M> store) {
if (getRawValue().length() > 0) {
store.addFilter(filter);
store.applyFilters(property);
} else {
store.removeFilter(filter);
}
}
我看到覆盖它的最简单方法是子类StoreFilterField
并重新定义此方法:
filterText = new StoreFilterField<ModelData>() {
@Override
protected void applyFilters(Store<M> store) {
if (getRawValue().length() > 3) {
store.addFilter(filter);
store.applyFilters(getProperty());
} else {
store.removeFilter(filter);
}
}
}