从事件侦听器获取shape对象

时间:2012-11-09 13:20:13

标签: javascript dojo dojox.gfx

在某些事件发生后以某种方式操纵形状的通常程序是很好理解的:

var circle = group.createCircle({ cx: 100, cy: 300, r: 50 }).setFill("green").setStroke("pink");
circle.connect("onclick",function(e) {
    circle.setFill("red");
});

问题是,我正在处理的图形已经从SVG文件转换为JSON,然后加载到dojox中,这意味着我实际上没有可以通过变量引用的形状对象。所以我的问题是,如何从均匀的侦听器中检索形状对象?这样的事情不起作用:

...
var group = surface.createGroup();
dojox.gfx.utils.deserialize(group, json);
dojo.connect(group.getEventSource(),"onclick",function(ev) {
    ev.target.setFill('blue');
});

事件目标是实际的形状节点,而不是对象,因此我无法调用任何dojox方法,如setFill()。我可以使用普通的SVG DOM方法,但如果dojo使用不同的IE渲染器,那么这会破坏。

那么我能以某种方式将该节点转换为形状对象吗?我的意思是,如果这不起作用,那么将图形加载到dojo中的重点是什么呢?我觉得我在这里缺少一些明显的东西。

1 个答案:

答案 0 :(得分:0)

这有效:

group.connect("onclick",function(ev) {
    ev.gfxTarget.setFill('#ff0000');
});

而不是the docs当前建议的方式:使用onmouseclick事件。然后,您可以将形状对象作为事件对象的gfxTarget属性进行访问。