Extjs 更改Ext.chart.series.Gauge系列的颜色集
我正在使用extjs,我对这个框架没有太多的经验。我有一个仪表,我需要在它初始化后改变它的颜色。在一个完美的世界里,我会用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',
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});
}