我看到有关此主题的类似帖子,但在这种情况下我遇到了实施问题,所以我想知道是否有人可以帮我解决这个问题。
我有一个网格面板和一个文本字段,这两个组件都是Sencha ExtJS 4.2。
我创建了一个处理程序方法,它将接收文本字段值并按如下方式处理:
markTextInGrid: function(searchFieldValue) {
var me = this,
tktListGrid = this.getTicketListGrid(),
tktListGridStore = tktListGrid.getStore(),
tktListGridView = tktListGrid.getView();
tktListGridStore.each(function(record, idx) {
try {
var td = Ext.fly(me.tktListGridView.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(searchFieldValue, function(m) {
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();
}
} catch (e) {}
});
}
我使用了try-catch,因为出于某种原因,我并不总是能够在down
行使用“Ext.fly
”。有时它返回“未定义”但不确定原因。在LKiveSearchGrid的例子中,它似乎总是有效,但对于我的情况却不一样。
我定义了以下组件:
tagsRe: /<[^>]*>/gm,
tagsProtect: '\x0f',
matchCls: 'x-livesearch-match',
我尝试了那段代码,但没有突出显示网格中的单词。
有人可以帮我一把吗?我会继续研究。
提前致谢。