Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 更改Ext.chart.series.Gauge系列的颜色集_Extjs_Extjs4_Extjs4.1 - Fatal编程技术网

Extjs 更改Ext.chart.series.Gauge系列的颜色集

Extjs 更改Ext.chart.series.Gauge系列的颜色集,extjs,extjs4,extjs4.1,Extjs,Extjs4,Extjs4.1,我正在使用extjs,我对这个框架没有太多的经验。我有一个仪表,我需要在它初始化后改变它的颜色。在一个完美的世界里,我会用 this.myGauge.series.colorSet=['#fff','#ddd'] 但在这种情况下,颜色集是未定义的 创建新系列并将其分配给图表,如下所示: this.myGauge.series.add(new Ext.chart.series.Series([{ type: 'gauge', field: 'value',

我正在使用extjs,我对这个框架没有太多的经验。我有一个仪表,我需要在它初始化后改变它的颜色。在一个完美的世界里,我会用

this.myGauge.series.colorSet=['#fff','#ddd']

但在这种情况下,颜色集是未定义的

创建新系列并将其分配给图表,如下所示:

this.myGauge.series.add(new Ext.chart.series.Series([{
        type: 'gauge',
        field: 'value',
        donut: 30,
        colorSet: ['#aaa', '#ddd']
     }]));
这会在尝试重新绘制图表时引发错误

TypeError:series.drawSeries不是函数

即使我没有在任何地方显式调用drawSeries()

在事件中修改仪表图表颜色集的最佳实践是什么?仪表的值可以改变,当它改变时,我需要更新它的颜色(十六进制代码只是测试值)

if(仪表值>=95){
//绿色的
this.typicalGauge.series.colorSet=['#fff','#ddd'];
}否则如果(gaugeValue<95&&gaugeValue>=85){
//黄色的
this.typicalGauge.series.colorSet=['#ccc','#ddd'];
}否则如果(仪表值<85){
//红色的
this.typicalGauge.series.colorSet=['#aaa','#ddd'];
}
多亏了埃里克·库克,我走上了正确的道路。要更改颜色集中的第一项,我需要做的是利用传递到渲染器函数中的索引变量,如下所示:

renderer: function (sprite, record, attr, index, store) {

                         var value = record.get("value");

                         var color = null;
                         if (value >= 95) {
                            color = "#1BE01B";
                         } else if (value < 85) {
                            color = "#DEE817";
                         } else {
                            color = "#E81717";
                         }
                         if (index == 0) {

                            return Ext.apply(attr, { fill: color });
                         } else {
                            return attr;
                         }

                      }
渲染器:函数(精灵、记录、属性、索引、存储){
var值=记录。获取(“值”);
var color=null;
如果(值>=95){
color=“#1BE01B”;
}否则如果(值<85){
color=“#DEE817”;
}否则{
color=“#E81717”;
}
如果(索引==0){
返回Ext.apply(attr,{fill:color});
}否则{
返回属性;
}
}

我所知道的最可靠的方法是通过
渲染器
函数。在我看来,它没有很好的文档记录,所以它看起来是这样的:

renderer: function(sprite, record, attr, index, store){
    // You'll probably want to set a breakpoint here just to see what values
    // you have to work with. I'm not completely sure myself.

    return Ext.apply(attr, {
        fill: "#f00" /* This is probably the property you're looking for */
    });
}
在我看来,ExtJS图表仍然有相当多的缺陷,所以如果它不能立即工作,也不要感到惊讶。但希望这能让你开始

编辑:每次图表重画时都会调用渲染器。您可以通过以下方式从记录中获取值:

renderer: function(sprite, record, attr, index, store){
    var value = record.get("value"),
        color;
    if (value >= 95) {
        color = "#fff";
    } else if(value < 85) {
        color = "#aaa";
    } else {
        color = "#ccc";
    }
    return Ext.apply(attr, {fill: color});
}
渲染器:函数(精灵、记录、属性、索引、存储){
var value=record.get(“value”),
颜色
如果(值>=95){
color=“#fff”;
}否则如果(值<85){
color=“#aaa”;
}否则{
color=“#ccc”;
}
返回Ext.apply(attr,{fill:color});
}

我不确定是否有不同的方法来设置实际的颜色集,但这基本上就是你要做的。然后你只需重新绘制图表,你的颜色就应该改变。

我不知道如何在活动中使用它,你完全正确地认为它没有记录在案。我已经更新了原来的问题,以显示我是如何使用它的。谢谢你的帮助…但这根本不起作用,渲染器甚至没有被调用。我把它放错地方了!我现在调用了它并更改了颜色,但它同时更改了这两种颜色,我只需要更改颜色集中的第一种颜色。这毕竟是正确的-只需要在渲染器中再更改一点。我注意到它被调用了两次,索引是0,然后是1。原来index是colorSet的索引,所以我只想在index==0时应用颜色,否则只返回attr。
renderer: function(sprite, record, attr, index, store){
    var value = record.get("value"),
        color;
    if (value >= 95) {
        color = "#fff";
    } else if(value < 85) {
        color = "#aaa";
    } else {
        color = "#ccc";
    }
    return Ext.apply(attr, {fill: color});
}