Domanda

Sto creando un app in Backbone.js che ha un genitore e viste multiple del bambino. I punti di vista dei bambini contengono link che ascoltano e svolgono una funzione.

Il genitore memorizza un elenco di tutti i punti di vista dei bambini. Nella funzione di rendering, dopo che è stato fatto calcolando il proprio html, lo fa il seguente:


$(this.el).html(html);
for (var i = 0; i < this.views.length; i++){
    $('.children', this.el).append(this.views[i].render().el);
}

RISPOSTA: Il problema era che stavo creando il collegamento durante il rendering. Cioè sul primo render (che è stato chiamato da init) l'evento binded con successo per il collegamento. Tuttavia, dal momento che tutte le seguenti chiamate di rendere ricreare l'intero elemento, il nuovo collegamento non avevano il conduttore ad esso legato. Questo è stato risolto con soluzione @ Tom Tu di this.delegateEvents() aggiungendo al rendering

È stato utile?

Soluzione

Probabilmente si sta utilizzando jQuery funzione remove da qualche parte per rimuovere le subviews dalla vista - rimuove automaticamente tutti gli eventi legati all'elemento (this.el) - set nell'oggetto events. È possibile utilizzare il metodo this.delegateEvents() nel rendering delle subviews dopo il rendering modello per associare nuovamente i delegati degli eventi indicati in oggetto events o l'uso metodo jquery detach invece per rimuovere elementi da DOM senza rimuovere binding di eventi ( link ). Il metodo delegateEvents è molto costoso e, quindi, vi consiglio il metodo detach per la rimozione di elementi che si desidera riutilizzare se si sta renderizzando lunghe liste di subviews -. Irrilevante se è solo un paio di punti di vista

altra possibilità è che hai impostato il torto oggetto events -. Difficile dire dalla quantità di codice fornito, ma scommetto sul primo

Altri suggerimenti

Una sfida davvero comune. Per i futuri cercatori di questa domanda, ecco un grande articolo sulla visualizzazione di rendering:

Hai solo bisogno di fare in modo che delegateEvents è chiamato a ricollegare gli eventi sul tuo subviews qualsiasi momento .html) viene eseguito (. E dal momento che setElement di Backbone chiama già delegateEvents, una soluzione rapida potrebbe assomigliare a questo ...

http://ianstormtaylor.com/rendering-views-in -backbonejs-isnt-sempre-simple /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top