Ich habe eine Liste von Orten in Google Maps, auf die ein Benutzer klicken kann. Wenn sie klicken, erzeuge ich eine Vorlage, die die Informationen für diesen Ort anzeigt. Im Moment habe ich ein Container-Div, das ich mit der neu erzeugten Vorlage .replaceWith() anrufe.Listener zu dynamisch hinzugefügtem HTML innerhalb von Closure hinzufügen?
Wenn ein Benutzer versucht, auf eine Schaltfläche in dieser Vorlage zu klicken, möchte ich eine ortspezifische Aktion ausführen (z. B. den Ort anheften). Um dies zu tun, brauche ich die Ort-ID irgendwo gespeichert, damit der Listener-Code weiß, was zu tun ist. Ich hatte gehofft, einen Verschluss zu verwenden, um die Hörer on the fly zu erstellen, so dass ich die ID des Orts „umschließen“ könnte, dass der Betrachter Details wird immer für:
function selectPlace(place_id) {
// Swap out the old template
$("#listing-placeholder").replaceWith(listing_info_template(place));
// Create a listener to handle clicks while remembering the place_id
(function(){
$('.save_button').click(function(){
alert("Clicked handler for " + place_id);
});
})();
}
Dies scheint nicht überhaupt zu arbeiten ; mein Zuhörer feuert nie. Es scheint, dass dies mit der Tatsache zusammenhängt, dass .save_button innerhalb der Vorlage liegt (dynamisch hinzugefügt). Nicht sicher, warum das so ist.
Ich zögere, .on() zu verwenden, denn dann müsste ich die ID irgendwo in die Vorlage setzen, was sich für mich echt hacky anfühlt. Ich weiß, dass backbonejs Ereignisse irgendwie an dynamisch eingefügte Vorlagen bindet, so dass jeder relevante Kontext für Ereignisse noch verfügbar ist - das ist effektiv, was ich hier nachahmen möchte.
Also, irgendwelche Vorschläge, wie ich einen Listener zu einem dynamisch erstellten Element in einer Weise hinzufügen kann, dass der Listener Schlüsselinformationen über das "Objekt" erhält, das konzeptionell darstellt, ohne den HTML mit zusätzlichen Metadaten aufzublähen (I habe Leute gesehen, die die IDs wie "save_button-" machen und dann auf dem Armaturenbrett teilen, aber das scheint extrem hacky?)?
Danke!
untersuchen Vielleicht Local Storage mit dem Zustand des ausgewählten Id zu erhalten: https://developer.mozilla.org/en/docs/Web/API/Window/localStorage. Dann kannst du jquerys 'on' verwenden. –
Du schlägst vor, dass ich die ID irgendwo im HTML speichern und dann als einen Index in meinen lokalen Speicher verwenden soll, richtig? Ich habe darüber nachgedacht, aber es fühlt sich falsch an, die ID im html zu speichern - sollte es nicht eine Art Schließung geben, die das kann? Backbone scheint in der Lage zu sein, den Objektkontext an den HTML- und Listener zu binden, ohne die ID in den HTML-Code einzufügen. – droptic
Nicht der HTML-Code, aber Sie haben viele Optionen, um die ausgewählte ID zu speichern.Lokaler Speicher, erstelle eine Variable mit einem boader scope, oder wie du in html erwähnt hast (wie ein verstecktes Feld, aber ja, das ist hässlich) und wahrscheinlich ein paar mehr. –