I'm trying to override the behavior of a StringFilter
used by a Grid
.
The code below doesn't have some functionality, I just want to see if validateModel
is being called. The thing is, it is not being called ever. On the other hand onFieldKeyUp
is being called as it should. What am I doing wrong?
I'm using Sencha GXT 3.1.0
, GWT 2.6.1
, Java 1.7
Filter<Record, ?> filter = new StringFilter<Record>(valueProvider)
{
@Override
protected void onFieldKeyUp(Event event)
{
Window.alert("onFieldKeyUp"); //--> This is called
int key = event.getKeyCode();
if (key == KeyCodes.KEY_ENTER && field.isValid())
{
event.stopPropagation();
event.preventDefault();
menu.hide(true);
return;
}
super.onFieldKeyUp(event);
}
@Override
protected boolean validateModel(Record model)
{
Window.alert("validateModel"); //--> This is NOT called
String rowValue = getValueProvider().getValue(model);
rowValue = (rowValue == null) ? "" : rowValue;
Object filterObject = getValue();
String filterValue = filterObject == null ? "" : String.valueOf(filterObject);
if (filterValue.isEmpty() && rowValue.isEmpty())
{
return true;
}
else
{
//Here I want to put some more code manipulating the filtevalue
return rowValue.toLowerCase().indexOf(filterValue.toLowerCase()) > -1;
}
}
};
Did you put the filters.setLocal(true);
and filters.initPlugin(grid);
?
Here is the code I tried and worked:
GridFilters<MyRow> filters = new GridFilters<MyRow>();
filters.initPlugin(grid);
StringFilter<MyRow> filter = new StringFilter<MyRow>(nameValueProvider) {
@Override
protected boolean validateModel(MyRow model) {
Window.alert("Hello");
return super.validateModel(model);
}
};
filters.addFilter(filter);
filters.setLocal(true);