1

我正在使用这里的 Extjs4 多分组插件。

我已经成功使用它,但是我想显示组标题本身中每列总计的摘要。我如何为此设置适当的CSS?

分组标题中各列下的列总和

在 Multigrouping.js 中

getFragmentTpl: function() {
    var me = this;
    return {
        indentByDepth: me.indentByDepth,
        depthToIndent: me.depthToIndent,
        renderGroupHeaderTpl: function(values, parent) {
     return Ext.XTemplate.getTpl(me, 'groupHeaderTpl').apply(values, parent);
            //var z = new Ext.XTemplate('{name} ({rows.grouplength})');
            //return z.apply(values, parent);
        }
    };
},

在我的网格中

features: [ 
    {
        ftype:'multigrouping',
        groupHeaderTpl: [
                         '{[this.readOut(values)]}',
                         {
                             readOut:function(values) {
                                 debugger;
                                 var sum1 =0 ,sum2=0,sum3=0;
                                    for( var i = 0 ; i< values.records.length ; i++)
                                        {
                                            var val = parseFloat(values.records[i].data.d2012.mp);
                                            sum1 += isNaN(val) ? 0.0 : val;
                                            val = parseFloat(values.records[i].data.d2013.mp);
                                            sum2 += isNaN(val) ? 0.0 : val;
                                            val = parseFloat(values.records[i].data.d2014.mp);
                                            sum3 += isNaN(val) ? 0.0 : val;

                                        }
                                    return values.name +  '(' + values.records.length + ')' +  ' ' + sum1.toFixed(2) + '            ' + sum2.toFixed(2) + '           ' + sum3.toFixed(2);
                                }
                         }
                     ]

    },
4

1 回答 1

0

不得不求助于一些黑客来让它工作。还在等官方答复。我必须这样做而不使用多分组摘要的主要原因是 - 我想限制来自服务器的记录数。我可以在服务器端对我的业务对象进行一些智能分组。- 这样做的主要原因是因为 IE8 在更大数据集上的性能。- 已经尝试过在 chrome 上运行良好但在 IE8 上出现性能问题的 extjs4 树网格组件。

hack 是 a) 在网格中使用数组属性来存储我想要操作的 dom 元素 b) 使用布尔值来知道第一次布局何时完成 b) 为 afterlayout 添加监听器(当你的应用程序可以做一个 Ext.get('..dom element..') 你知道你已经完成了)

听众:

listeners : 
{
 afterlayout : function(eopts)
 {
     var x = this.mOwnArray;
     if(!this.loadedwithVals && x.length > 0)
         {
    for(var i =0 ; i<x.length ; i++)
        {
            var dom = Ext.get(x[i].id);
            var theId = dom.id;
            theId = theId.match(/\d+/)[0];
            var title = dom.query("td[class='x-grid-cell x-grid-cell-first']");
            title[0].className = 'x-grid-cell x-grid-cell-gridcolumn-' + theId + ' x-grid-cell-first';
            title[0].colSpan=1;
            var groupedHeader = dom.query("div[class='x-grid-group-title']");
            groupedHeader[0].innerHTML =  x[i].name + '(' + x[i].length + ')';
            for(var year=2012;year<=2018;year++)
                {
                var t = "t"+year;
                var someText1 = '<td class=" x-grid-cell x-grid-cell-numbercolumn">';
                var someText2 = '<div class="x-grid-cell-inner " style="text-align: left; ;">';
                var someText3 = '<div class="x-grid-group-title">' + x[i].total[t] + '</div></div></td>';
                var someText = someText1 + someText2 + someText3;
                dom.insertHtml("beforeEnd",someText);   
                }
        }
            this.loadedwithVals = true;
     }
}

和功能如

features: [ 
    {
        ftype:'multigrouping',
        startCollapsed : true,
        groupHeaderTpl: [
                         '{[this.readOut(values)]}',
                         {
                             readOut:function(values) {
                                 var header = new Object();
                                 header.id = values.groupHeaderId;
                                 header.sum = [];
                                 header.total = new Object();
                                 for(var year = 2012 ; year <= 2018 ; year++)
                                     {
                                        var t = "t"+year;
                                        header.total[t] = [];
                                     }
                                 // all the records in this header
                                    for( var i = 0 ; i< values.records.length ; i++)
                                        {
                                            // for all the 'years' in this record
                                            for(var year=2012;year<=2018;year++)
                                                {
                                                    var d = "d"+year;
                                                    var ct = "t" + year;
                                                    var arecord = values.records[i].data;
                                                    var val = parseFloat(arecord[d].mp);
                                                    val = isNaN(val) ? 0.0 : val;
                                                    Ext.Array.push(header.total[ct],val);
                                                }
                                        }
                                // push the sum of the records into its top level group
                                         for(var year = 2012 ; year <= 2018 ; year++)
                                         {
                                            var t = "t"+year;
                                            var sum = Ext.Array.sum(header.total[t]);
                                            header.total[t] = sum.toFixed(2);
                                         }
                                 header.name = values.name;
                                 header.length = values.records.length;
                                 var headerName = values.name;
                                 if(values.hasOwnProperty('parent'))
                                     {
                                        var parent = values.parent;
                                        headerName = headerName.replace(parent,'');
                                     }
                                 header.name = headerName;
                                 header.length = values.records.length;
                                 Ext.Array.push(grid.mOwnArray,header);
                                 // really not used
                                return values.name +  '(' + values.records.length + ')';
                                }
                         }
                     ]

    },
]
于 2012-10-12T19:28:16.957 回答