我想在我的垂直标尺上添加一个指示器,但是指示器的格式像一个三角形,但是我想要一个大的线。
这是JSFIDDLE的例子。
代码: require(['dojo/parser', 'dojox/dgauges/components/default/VerticalLinearGauge','dojox/dgauges/RectangularRangeIndicator', 'dojo/domReady!'], function (parser, VerticalLinearGauge) {
parser.parse();
var ri = new dojox.dgauges.RectangularRangeIndicator();
ri.set("start",0 );
ri.set("value", 30);
ri.set("startThickness",100);
ri.set("endThickness",100);
gauge.getElement("scale").addIndicator("ri", ri, false);
});
这是一个bug,将在下一个版本(1.8)中修复。X和1.9).
见https://github.com/dmandrioli/dgauges/issues/15
作为一种解决方法,您可以像这样重新定义坏方法:myRangeIndicator._defaultVerticalShapeFunc =
function(indicator, group, scale, startX,
startY, endPosition, startThickness, endThickness,
fill, stroke){ ... }
参见http://jsfiddle.net/BFPuL/5/
我认为属性是startThickness
和endThickness
(最后没有"stroke")。但是,在将这些属性设置为期望的相等值时,我仍然没有得到一条实线。似乎有些奇怪(也许是一个bug)正在发生的方式,startThickness
属性的处理。
这个问题引起了我的兴趣,所以我将尝试稍后留出一些时间来深入研究源代码,看看真正的问题是什么,但是现在我可以为您提供一个肮脏的解决方案。RectangularRangeIndicator使用dojox/gfx
模块绘制,绘制的指示器轮廓由stroke
属性控制。所以,如果你愿意,你可以这样做:
var ri = new dojox.dgauges.RectangularRangeIndicator();
ri.set("start",0 );
ri.set("value", 30);
ri.set("startThickness", 0);
ri.set("endThickness", 0);
ri.set("stroke", {color: "red", width: 2.5});
ri.set("paddingLeft", 7); // Default is 10, set this to whatever works for you.
这看起来会画一条直线(这实际上是一个非常薄的形状的边界)。看看它在实际示例中的样子。再一次,我明白这不是最好的解决方案,因为它更像是一个肮脏的技巧,但它是一种绕过代码中呈现范围指示器的错误的方法。