2012-11-26 2 views
2

Я пытаюсь поместить поле поиска в отношении просмотра данных. В верхней части окна просмотра данных есть панель инструментов, состоящая из текстового поля. При вводе некоторого текста в поле, я хочу вызвать функцию поиска. На данный момент я достал слушателя в текстовое поле, но слушатель вызывается сразу же после того, как пользователь начинает вводить текст в текстовое поле.поле поиска в dataview в extjs

Но, что я пытаюсь сделать, это запустить функцию поиска только тогда, когда пользователь ввел по крайней мере 3 символа в текстовое поле. Как я могу это сделать?

Код ниже

Посмотреть

var DownloadsPanel = { 
      xtype : 'panel', 
      border : false, 
      title : LANG.BTDOWNLOADS, 
      items : [{ 

       xtype : 'toolbar', 
       border : true, 
       baseCls : 'subMenu', 
       cls : 'effect1', 
       dock : 'top', 
       height : 25, 
       items : [{ 
        xtype : 'textfield', 
        name : 'SearchDownload', 
        itemId : 'SearchDownload', 
        enableKeyEvents : true, 
        fieldLabel : LANG.DOWNLOADSF3, 
        allowBlank : true, 
        minLength : 3 
       }], 
{ 

       xtype : 'dataview', 
       border : false, 
       cls : 'catalogue', 
       autoScroll : true, 
       emptyText : 'No links to display', 
       selModel : { 
        deselectOnContainerClick : false 
       }, 
       store : DownloadsStore, 
       overItemCls : 'courseView-over', 
       itemSelector : 'div.x-item', 
       tpl : DownloadsTpl, 
       id : 'cataloguedownloads' 

      }] 

Контроллер:

init : function() { 

     this.control({ 
      // reference to the text field in the view 
       '#SearchDownload' :{ 
        change: this.SearchDownloads 

      } 
}); 

SearchDownloads : function(){ 
      console.log('Search functionality') 

     } 

UPDATE 1: я смог достать слушателя после трех символов были введены с использованием ниже код:

Con troller

'#SearchDownload' :{ 
        keyup : this.handleonChange,  
      }, 

     handleonChange : function(textfield, e, eOpts){ 

      if(textfield.getValue().length > 3){ 

       console.log('Three'); 
      } 
    } 

любые рекомендации или примеры того, как выполнить поиск в хранилище данных, будут оценены.

ответ

3

Правильный способ: подписаться на мероприятие, посвященное событию поля, и проверить, должно ли новое значение иметь не менее 3 символов перед продолжением.

'#SearchDownload' :{ change: this.handleonChange } 
// othoer code 
handleonChange : function(textfield, newValue, oldValue, eOpts){ 
     if(newValue.length >= 3){ 
      console.log('Three'); 
     } 
} 

КПП. Я рекомендую использовать строчные и «-» разделенные имена для id. В вашем случае

itemId : 'search-download' 

Редактироватьприменить фильтр

Чтобы применить фильтр я хотел бы использовать filter Я думаю, вы теперь поле, которое вы хотите фильтровать? Позволяет делать вид store является переменным в контроллере, чем вы можете заменить console.log() с

this.store.filter('YourFieldName', newValue); 

Вторых паров также может быть регулярным выражением, используя значение, как в примере

this.store.filter('YourFieldName', new RegExp("/\"+newValue+"$/")); 

Конечно вы можете также использовать a Функция

this.store.filter({filterFn: function(rec) { return rec.get("YourFieldName") > 10; }}); 
+0

благодарю вас SRA за ваши комментарии. изменили его на «изменение», и он отлично работает :) Также, какие-либо рекомендации по поиску магазина?Могу ли я использовать функцию filterBy – rosebrit3

+0

@ rosebrit3 Вот еще несколько примеров ... – sra

1

Спасибо вам большое за ваши ответы. Вот что я сделал, основываясь на комментариях

filterDownloads : function(val, filterWh){ 

     if(filterWh == 1){ 
      var store = Ext.getStore('CatalogueDownloads'); 
      store.clearFilter(); 
      store.filterBy(function (r){ 
       var retval = false; 
       var rv = r.get('title'); 
       var re = new RegExp((val), 'gi'); 
       retval = re.test(rv); 

       if(!retval){ 
        var rv = r.get('shortD'); 
        var re = new RegExp((val), 'gi'); 
        retval = re.test(rv); 
       } 

       if(retval){ 
        return true; 
       } 

       return retval; 
      }) 




     } 

    } 
+0

Вы приветствуете и благодарите за обмен своим решением. +1 – sra

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