Dataview Xtemplate函数在过滤商店时调用两次 - ExtJS 4.1.1

时间:2016-04-22 10:19:59

标签: extjs

我遇到了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;
                }
            }
        ])
    }]                  
}

0 个答案:

没有答案