Senza sapere che cosa sei fino a esattamente, sembra che tu stia andando nella direzione sbagliata. La tua vista dovrebbe essere guidata dal tuo modello di vista. Quindi non dovresti aggiungere direttamente elementi DOM a cui devi applicare i collegamenti a eliminazione diretta.
Invece dovresti aggiornare il tuo modello di vista per riflettere il cambiamento nella vista, che quindi fa apparire il tuo nuovo elemento.
Ad esempio, per il tuo $('body').append('<a href="#" data-bind="click: something">Click me!</a>');
, anziché aggiungere l'elemento DOM quando il pulsante deve essere visibile, controlla la visibilità del pulsante utilizzando il modello di visualizzazione.
Così il vostro modello di vista include
var viewModel = { clickMeAvailable: ko.observable(false) }
E il codice HTML include
<a href="#" data-bind="click: something, visible: clickMeAvailable">Click me!</a>
quando cambia lo stato di applicazione in modo che il pulsante di click me è disponibile, è quindi solo viewModel.clickMeAvailable(true)
.
Il punto di questo e di gran parte del knockout è separare la logica aziendale dalla presentazione. Quindi il codice che rende cliccabile su di me non teme che il click me coinvolga un pulsante. Tutto ciò che fa è aggiornare viewModel.clickMeAvailable
quando clicchi è disponibile.
Ad esempio, fare clic su di me è un pulsante Salva che dovrebbe essere disponibile quando un modulo viene compilato in modo valido. Collegherebbe la visibilità del pulsante di salvataggio a un modello di vista formValid
osservabile.
Ma poi si decide di cambiare le cose quindi dopo che il modulo è valido, appare un accordo legale che deve essere consentito a prima di salvare. La logica del modulo non cambia, ma imposta lo formValid
quando il modulo è valido. Dovresti solo cambiare ciò che accade quando si modificano le modifiche formValid
.
Come lassombra sottolinea nei commenti su questa risposta, ci sono casi in cui la manipolazione diretta del DOM può essere il vostro approccio migliore - ad esempio una pagina dinamica complessa in cui si desidera solo idratare parti della vista quando sono necessarie. Ma stai abbandonando parte della separazione delle preoccupazioni che Knockout fornisce in questo modo. Stai attento se stai pensando di fare questo scambio.
Puoi pubblicare del codice per mostrare cosa stai facendo? –
bene, ad esempio qualcosa di simile: $ ('body'). Append ('Click me!'); –
Non sono sicuro che sia abbastanza contesto per fornire una risposta utile. Capisco cosa stai cercando di fare, ma con un'immagine più completa del tuo codice (perché/quando stai iniettando nuovi elementi DOM) è difficile rispondere con il modo migliore di occuparsene. Potrebbe essere, dopo aver esaminato la tua attuale soluzione, che qualcuno può indicare un modo per non dover iniettare i nuovi elementi o ha una soluzione alternativa per ciò che stai cercando di fare. –