2013-06-14 4 views
2

У меня есть ComboBox с удаленным хранилищем с локальной фильтрацией.
Вместо фильтрации по умолчанию, по первым символам, например %query, я хочу фильтровать с помощью режима contains/anyMatch, такого как %query%.ComboBox с anyMatch поиска в ExtJS

Я попытался решить эту проблему с ответами на вопрос: ExtJs: Search/Filter within a ComboBox, но это не сработало.

Код:

var users = Ext.create('Ext.form.ComboBox',{ 
    displayField : 'userName', 
    valueField : 'userName', 
    queryMode : 'local', 
    typeAhead : true, 
    store : Ext.create('Ext.data.Store', { 
     model : 'User', 
     proxy  : { 
      type : 'ajax', 
      url  : './user/list', 
      reader : { 
       type: 'json', 
       root: 'data' 
      } 
     } 
    }); 
}); 

Спасибо!

ответ

8

Просто надо добавить следующий код в Ext.form.field.Combobox. Это работает в ExtJs 4.1, который не имеет свойства anyMatch.

listeners : { 
    beforequery: function(record){ 
     record.query = new RegExp(record.query, 'i'); 
     record.forceAll = true; 
    } 
} 
7

Используйте опцию конфигурации anyMatch, так как Ext 4.2.1. В более ранних версиях, похоже, вам нужно переопределить метод doQuery в Ext.form.field.ComboBox только, чтобы иметь возможность добавить эту опцию к экземпляру фильтра вы найдете там:

me.activeFilter = new Ext.util.Filter({ 
    root: 'data', 
    anyMatch: true, // <- add this 
    property: me.displayField, 
    value: queryString 
}); 
2

Модификатор g более важен для глобального поиска. i предназначен только для поиска без учета регистра.

listeners : { 
beforequery: function(record){ 
    record.query = new RegExp(record.query, 'ig'); 
}} 
+0

спасательный жилет, спасибо! – devbnz

Смежные вопросы