ExtJS将记录组合​​在具有相同字段的商店中

时间:2013-06-11 13:49:38

标签: javascript extjs extjs4

示例XML文件:

<BrowserInformation>
      <Value>
            <Year>2011</Year>
            <Name>Firefox</Name>
            <Count>4952</Count>
        </Value>
            <Year>2011</Year>
            <Name>MSIE</Name>
            <Count>4613</Count>
        <Value>
            <Year>2011</Year>
            <Name>Chrome</Name>
            <Count>1401</Count>
        </Value>
        <Value>
            <Year>2011</Year>
            <Name>Safari</Name>
            <Count>1111</Count>
        </Value>
        <Value>
            <Year>2011</Year>
            <Name>Unknown</Name>
            <Count>1119</Count>
        </Value>
        <Value>
            <Year>2011</Year>
            <Name>Opera</Name>
            <Count>9</Count>
        </Value>
        <Value>
            <Year>2012</Year>
            <Name>Firefox</Name>
            <Count>3544</Count>
        </Value>
            ...
</BrowserInformation>

生成柱形图: enter image description here

目前,图表中有一个条形图,用于XML文件中的每条记录。我想得到每个浏览器的聚合计数(即对于Firefox,它将是4952 + 3544)。数据和商店类的配置选项idProperty和groupers似乎只是在图表中将相同名称的栏放在一起,但似乎并没有将它们组合在一起。假设文件中的数据不能更改。我怎么做到这一点?我可以在模型,商店或图表中设置特定的配置属性吗?如果是这样的话?或者还有另一种方式吗?

1 个答案:

答案 0 :(得分:2)

我建议在模型中使用一个新字段,比如说“total”,并使用转换函数。

来自Ext JS API documentation

“如果需要更复杂的值提取策略,则使用转换函数配置字段。这将传递整个行对象,并可以以任何必要的方式查询它以返回所需的数据。”< / p>

你的转换功能可能是这样的

function convert2Total(v, record){
    return record.data.firefox + record.data.chrome;
}

您模型中的字段数组将如下所示:

fields: [ { name: "firefox" },
          { name: "chrome" },
          { name: "total", convert: convert2Total }]