2013-02-08 102 views
0

只有当用户至少输入3个字符时,才想搜索到我的树。 我怎么能抓住“doSelect”事件来做到这一点? 如果我在文本字段添加一个keylistener来检查它的值,处理程序在doSelect之后被调用。 任何人都可以帮助我吗?GWT GXT StoreFilterField事件

这是一个例子...

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

(看来是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); 
    } 
    } 
} 
+0

谢谢。太棒了!还有一种截取搜索结束的方法?这是一个很大的ModelData,我想显示一个进度条... – 2013-02-11 08:38:02

+0

嗨,也许你可以帮助我解决这个问题... http://stackoverflow.com/q/15006376/2055624 – 2013-02-22 11:05:36