2

我有一个简单的程序,我在其中获取一个 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,因为我猜闭包总是在最后一个矩形引用的上下文中执行。

需要一些帮助来解决这个问题,以便事件可以触发所有矩形

提前致谢

问候希亚姆

4

0 回答 0