2016-10-05 7 views
2

Я пытаюсь применить this example с другим путём. Когда я пытаюсь его на console.log кажется работать без ошибок, но когда я делаю это на function(){}, получается ошибка все сеточный метод не определен, например:Extjs 6 - grid поиск

Uncaught TypeError: Cannot call method 'getView' of undefine.

Функция:

onTextFieldChange = function() { 
     var grid = Ext.getCmp('grid'), 
       value = Ext.getCmp('gridfield'), 
       view = grid.getView(), 
       columns = grid.getColumns(); 
     view.refresh(); 
     grid.searchValue = value.getValue(); 
     grid.matches = []; 
     grid.currentIndex = null; 
     if (grid.searchValue !== null) { 
      grid.store.each(function (record, index) { 
       var node = view.getNode(record), 
         count = 0; 
       if (node) { 
        Ext.Array.forEach(columns, function (column) { 
         var cell = Ext.fly(node).down(column.getCellInnerSelector(), true), 
           matches, 
           cellHTML, 
           seen; 
         if (cell) { 
          matches = cell.innerHTML.match(grid.tagsRe); 
          cellHTML = cell.innerHTML.replace(grid.tagsRe, grid.tagsProtect); 
          cellHTML = cellHTML.replace(grid.searchRegExp, function (m) { 
           ++count; 
           if (!seen) { 
            grid.matches.push({ 
             record: record, 
             column: column 
            }); 
            seen = true; 
           } 
           return '<span class="' + grid.matchCls + '" style="font-weight: bold;background-color: yellow;">' + m + '</span>'; 
          }, grid); 
          Ext.each(matches, function (match) { 
           cellHTML = cellHTML.replace(grid.tagsProtect, match); 
          }); 
          // update cell html 
          cell.innerHTML = cellHTML; 
         } 
        }); 
       } 
      }); 
     } 
    }; 

Событие:

xtype: 'textfield', 
name: 'searchField', 
id: 'txtfield', 
hideLabel: true, 
width: 200, 
change: onTextFieldChange() 

Любые предложения?

ответ

1

Я ответил на мой собственный вопрос, если его нет, это метод onTextFieldChange()

onTextFieldChange = function() { 
     var me = Ext.getCmp('grid'), 
       count = 0; 
     me.view.refresh(); 
     me.searchValue = getSearchValue(); 
     me.indexes = []; 
     me.currentIndex = null; 

     if (me.searchValue !== null) { 
      me.searchRegExp = new RegExp(me.searchValue, 'g' + (me.caseSensitive ? '' : 'i')); 

     me.store.each(function (record, idx) { 
      var td = Ext.fly(me.view.getNode(idx)).down('td'), 
        cell, matches, cellHTML; 
      while (td) { 
       cell = td.down('.x-grid-cell-inner'); 
       matches = cell.dom.innerHTML.match(me.tagsRe); 
       cellHTML = cell.dom.innerHTML.replace(me.tagsRe, me.tagsProtect); 

       // populate indexes array, set currentIndex, and replace wrap matched string in a span 
       cellHTML = cellHTML.replace(me.searchRegExp, function (m) { 
        count += 1; 
        if (Ext.Array.indexOf(me.indexes, idx) === -1) { 
         me.indexes.push(idx); 
        } 
        if (me.currentIndex === null) { 
         me.currentIndex = idx; 
        } 
        return '<span class="' + me.matchCls + '">' + m + '</span>'; 
       }); 
       // restore protected tags 
       Ext.each(matches, function (match) { 
        cellHTML = cellHTML.replace(me.tagsProtect, match); 
       }); 
       // update cell html 
       cell.dom.innerHTML = cellHTML; 
       td = td.next(); 
       if (me.currentIndex !== null) { 
        me.getSelectionModel().select(me.currentIndex); 
       } 
      } 
     }, me); 
    } 

    // no results found 
    if (me.currentIndex === null) { 
     me.getSelectionModel().deselectAll(); 
    } 
};