javascript - Extjs 6 - 网格搜索

标签 javascript search extjs grid

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

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

有什么建议吗?

最佳答案

如果没有我自己回答我的问题,这是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();
    }
};

关于javascript - Extjs 6 - 网格搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39874976/

相关文章:

algorithm - 在比 O((k+N) * 2^(N/2)) 更快的范围内生成所有子集总和?

javascript - 使用输入在 HTML 中搜索本地网页

forms - 避免 Ext.form 验证滚动到顶部

javascript - 如何处理 ExtJs 上的错误

javascript - 如何从 json 对象数组中删除整个 json 对象并将其写入文件?

javascript - 仅基于 CSS 的水平多级菜单

javascript - (初学者)如何动态修改一个json文件

php - 云驱动器与云文件(或者我们不应该打扰吗?)

java - 在java中搜索单词内的字符串

javascript - 如何在 extjs 中单击按钮后打开一个窗口