Ich habe einen Knockout-Binding-Handler, der plupload für Drag & Drop und Ajax-Uploads verwendet.Knockout binding handler teardown funktion?
Um das plupload-Skript zu verwenden, erstelle ich eine Instanz von plupload, die wiederum Ereignis-Listener an DOM-Elemente bindet.
Das funktioniert gut.
Ich habe jedoch eine Liste von "Ordnern" und wenn ich auf einen Ordner klicke, zeige ich eine Liste von Dateien in diesem Ordner an. Ich verwende die gleichen DOM-Elemente dafür, indem ich selectedFolder(). Dokumente mit foreach binde.
Das Problem, das ich habe, ist, dass in meinem Bindungshandler ich alle meine plupload Sachen in der init Funktion mache und da ich die DOM Elemente wiederverwende, bekommen sie mehrere Ereignishandler, die an sie gebunden sind. Dadurch werden die Drag & Drop-Ereignisse an alle Handler gesendet. Wenn ich also eine Datei in die Liste der gerenderten Dateien verschiebe, wird das Ereignis drop auch auf allen zuvor gerenderten Dateilisten ausgelöst.
Was ich suche ist eine Art Teardown oder Cleanup-Funktion im Bindungs-Handler, so dass ich alle Ereignisse aufheben kann, wenn eine Dateiliste ungerendert wird (ist das ein Wort?).
Vielleicht können wir das Unrendering nicht erkennen? Wie würde ich das dann handhaben? Ich würde es vorziehen, keine globale Instanz zu haben, da dies mich daran hindern würde, die Bindung an mehreren Orten gleichzeitig zu verwenden.
Es tut uns leid, Ihnen keinen Code zu geben. Ich bin auf meinem Handy atm.
Prost!
Das würde definitiv mein Problem lösen. Schade, dass es nicht als Unrender genannt wurde. Danke RP! –
Wenn Sie sich mit anderen Bibliotheken zusammenschließen, die ihre eigene DOM-Manipulation durchführen (was in einseitigen Anwendungen üblich ist), sollten Sie die jQuery-Methode unterhalb berücksichtigen, die für jede DOM-Entfernung ausgelöst wird (nicht nur die durch Knockout ausgelösten). Nützlich, wenn Sie bereits auf jQuery verweisen. –