我有一个简单的程序,我在其中获取一个 svg 文件,然后从 svg 中的 rect 元素创建 gfx 形状,如下所示
function superCallback(shape){
shape.setFill("red");
}
dojo.ready(function() {
// Load image
dojo.xhrGet({
//handleAs: 'xml',
url: 'svg/demo.svg',
load: function(data) {
// Create the surface
var surface = dojox.gfx.createSurface("logoHolder", 2000, 1500);
var group = surface.createGroup();
var dom = dojox.xml.parser.parse(data);
rects = dom.getElementsByTagName("rect");
for (var idx = 0 ; idx < rects.length ; idx++) {
//alert('Coordinates ' + rects[idx].getAttribute("x") + ', ' + rects[idx].getAttribute("y"));
var rectangle = group.createRect({ x: parseFloat(rects[idx].getAttribute("x")),
y: parseFloat(rects[idx].getAttribute("y")),
width: parseFloat(rects[idx].getAttribute("width")),
height: parseFloat(rects[idx].getAttribute("height")) })
.setStroke({ style: "Solid" , width: "7" , color :"black"});
rectangle.connect("onclick",dojo.hitch(rectangle,function(e) {
superCallback(rectangle);
}));
}
});
});
可以看出,我使用局部变量 rectangle 来创建和存储 gfx 形状,然后调用 connect 以将事件附加到它。
问题是该事件仅附加到在 for 循环中创建的最后一个 gfx rect,因为我猜闭包总是在最后一个矩形引用的上下文中执行。
需要一些帮助来解决这个问题,以便事件可以触发所有矩形
提前致谢
问候希亚姆