我遇到了dataview商店过滤器的问题。
在tpl中,我创建了名为'isHeader'的成员函数,用于对标题进行分组,如果我在同一标题下有多个记录。默认情况下它运行良好。
但是当我搜索'columnName'时,标题函数调用了两次。所以它总是返回假。
如果头函数调用一次,则返回true。那个时候我才能显示标题。
请参考JSON数据和存储&模型。
{
"mainsummary": [
{
"Analysisoption": "Hosts Under Maintenance",
"columnName": "java"
},
{
"Analysisoption": "Hosts Under Maintenance",
"columnName": "DC1"
},
{
"Analysisoption": "Component Tests Maintenance",
"columnName": "Java Classes",
"hostName": "java:13600"
}
]
}
我已将变量声明为全局变量
var titleObj = new Object();
{
xtype:'panel',
tools:[
{
xtype: 'trigger',
enableKeyEvents :true,
scope: this,
listeners : {
specialkey: function(field, e){
if (e.getKey() == e.ENTER) {
srch = field.getValue();
var dataViewObj = Ext.getCmp('dataviewObj');
store = dataViewObj.getStore();
store.filterBy(function(record, id){
host = record.get('columnName');
pattern = new RegExp(srch, 'gi');
if((pattern.test(host))){
titleObj = new Object();
return true;
}
});
store.sort(); //important to maintain proper sort order in the list
Ext.getCmp('dataviewObj').refresh();
}
},
}
}
],
items: [{
xtype: 'dataview',
id:'dataviewObj',
store: new Ext.data.Store({
fields: [
{name: 'columnName', type: 'string'},
{name: 'hostName', type: 'string'},
{name: 'Analysisoption', type: 'string'}
],
data:mainsummary
}),
tpl: new Ext.XTemplate([
'<tpl for=".">',
'{% var parentIndex = xindex; %}',
'<div class="maintenanceTable" style="margin:10px !important">',
'<tpl if="!Ext.isEmpty(Analysisoption) && this.isHeader(Analysisoption)">',
'<div>{Analysisoption} </div>',
'</tpl>',
'<table id="tableId" border="0" align="center" width="100%">',
'<tbody>',
'<tr>',
'<td><div>{columnName}</div></td>',
'<tpl if="!Ext.isEmpty(hostName)">',
'<td>{hostName}</td>',
'</tpl>',
'</tr>',
'</tbody>',
'</table>',
'</div>',
'</tpl>',
{
isHeader:function(Analysisoption){
console.log("isHeader",Analysisoption);
var isPrintHeader = false;
if(titleObj!=null && !titleObj.hasOwnProperty(Analysisoption))
{
titleObj[Analysisoption]=true;
isPrintHeader=true;
}
return isPrintHeader;
}
}
])
}]
}