次のように、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);
}));
}
});
});
ご覧のとおり、ローカル変数の四角形を使用して gfx シェイプを作成および保存し、次に connect を呼び出してイベントをアタッチしています。
問題は、クロージャーが常に最後の四角形参照のコンテキストで実行されていると思うため、イベントが for ループで作成された最後の gfx rect にのみ関連付けられることです。
イベントによってすべての四角形がトリガーされるように、これを修正するための助けが必要です
前もって感謝します
よろしくシャム