für elegante Lösung Mit Blick auf ein gemeinsames Problem:Coffee-Skript - die Erhaltung der Klassenkontext und den Ereigniskontext
Ich habe eine Klasse, die zu wenige Ereignisse abonnieren, möchte ich der Handler eine Instanz Methode in meiner Klasse sein, Sie möchten aber auch den Ereigniskontext abrufen (das Element, für das das Ereignis ausgelöst wurde).
Ich benutze die fette Linie Syntax für die Methodendefinition, aber bekam keine Möglichkeit, den Ereigniskontext zu bekommen. Um konkret zu sein benutze ich raphael js und wenn ich ein Element abonniere, enthält das Event-Objekt nicht das Element, nur das dom-Element, also muss ich ohne den Ereigniskontext das Element nach seiner raphael id innerhalb des Papiers suchen und ich mag es nicht.
Was ist die beste Vorgehensweise in diesem Fall? Ich erstelle gerade ein neues Kontextobjekt, bevor ich jedes Mal, wenn ich das Ereignis abonniere, den Instanzverweis und die Elementverweisliste enthält.
Dies ist die übliche Lösung ... es wird funktionieren, aber es hat etwas Magie in sich. Der Kontext wird für jedes Mal, wenn dieser Code ausgeführt wird, mit der Handler-Methode in einem neuen anonymen Objekt eingeschlossen. (als die Natur von js) Ich suche nach einem saubereren Weg, wenn es existiert. Wie gesagt, ich habe den Kontext innerhalb des Handlers erstellt, um dieses Problem zu vermeiden. –
@ChenKinnrot dann stellen Sie besser einige Codebeispiele bereit. Es ist sehr schwer zu verstehen, was Sie genau wollen und was Sie bereits erreicht haben. Eine Sache kann ich mit Sicherheit sagen: Wenn Sie möchten, dass die Funktion ein Objekt aus dem äußeren Bereich referenziert, müssen Sie es unweigerlich zu einem Abschluss in eine Phase wickeln und dann die Funktion für jeden neuen Kontext neu deklarieren lassen. Es gibt keine Magie hier, nur Javascript. –
könnte keinen besseren Weg, danke. –