Ich zeichne eine Reihe von Kreisen auf einem SVG-Container mit d3.js. Ich habe eine eventList
. Für jedes Element in dieser Liste zeichne ich einen Kreis. Hier ist, wie ich es mache. Es funktioniert:d3.js onclick-Ereignis verwendet den Wert der Variablen zum Zeitpunkt des Klicks statt zum Zeitpunkt der Zeichnung
var eventList = [
Object {stateId: 5},
Object {stateId: 6},
Object {stateId: 7},
];
for (var i = 0; i <= eventList.length-1; i++) {
var currEvent = eventList[i];
var myCircle = self.svgContainer.append("circle")
.attr("cx", i * 100)
.attr("cy", i * 100)
.attr("r", 5)
.attr("stroke-width", 0)
.attr("fill", "red");
}
ich jetzt versuchen, auf klicken, auf jedem dieser Kreise Verhalten hinzuzufügen. Ich möchte auf jeden Kreis klicken, um mich zu einer bestimmten URL zu bringen, die auf Daten basiert, die in der Ereignisliste gefunden werden. Hier ist, was ich in die Schleife oben hinzufügen:
myCircle.on({
"click": function() {
console.log("Hello! currEvent.stateId=", currEvent.stateId.toString());
console.log("currEvent = ", currEvent);
$state.go('myState', {
'stateId': currEvent.stateId
}
);
}
}
);
Nach meinem Verständnis sollte dies funktionieren. Aber das tut es nicht. Was es tut, ist den Onclick-Code auszuführen, wenn ich auf einen der Kreise klicke. An diesem Punkt wird der Wert currentEvent.stateId
- ausgegeben, der immer der letzte ist!. Das Klicken auf jeden Kreis bringt mich einfach zur selben URL - was nur passieren sollte, wenn man auf den letzten Kreis klickt.
Wie kann ich es so machen, dass der Onclick-Code den Wert von currentEvent zu dem Zeitpunkt verwendet, als dieser Kreis gezeichnet wurde, anstatt wenn der Klick tatsächlich ausgelöst wird? Das ist ein großes Problem für mich.
zeigen Sie die Struktur Ihrer 'eventList' Variable – iulian
Ich habe meine Frage aktualisiert Event zu zeigen. –
Ich hoffe, dieser Code 'myCircle.on ({' ist auch in der for-Schleife. Jetzt, wenn das click -Ereignis ausgelöst wird, wird die Variable 'currEvent' den letzten Wert enthalten. Dies ist nicht die Art, Daten mit Kreisen zu registrieren sollte "data'' enter' verwenden, um einen Kreis zu bilden und die Daten damit zu verbinden. – Cyril