0

仅当用户至少键入 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);
4

1 回答 1

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);
    }
  }
}
于 2013-02-08T20:05:17.703 回答