【问题标题】:Extjs 6 - grid searchExtjs 6 - 网格搜索
【发布时间】:2016-10-05 13:13:42
【问题描述】:

我尝试用另一种方式申请this example。当我在console.log 上尝试它时,它似乎运行没有错误,但是当我在function(){} 上尝试它时,它变成错误所有网格方法都是未定义的:

未捕获的类型错误:无法调用未定义的方法“getView”。

功能:

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()

有什么建议吗?

【问题讨论】:

    标签: javascript search extjs grid


    【解决方案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();
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2018-03-19
      相关资源
      最近更新 更多