2014-04-12 17 views
8

Ho una lista di risposte come di seguito:Come ri-rendering parziale del modello in backbone?

enter image description here

ogni voce dell'elenco è un modello di spina dorsale.

{ 
    title: 'answer title...', 
    content: 'answer content...', 
    voteStatus: 'up' 
} 

Quando clicco su-voto o verso il basso-voto, del voteStatus modello sarà un cambiamento, e questo oggetto risposta essere ri-renderizzare.

Se nel contenuto della risposta è presente un'immagine, anche l'immagine verrà ricreata, ma non è quello che voglio.

Come potrei appena eseguire il rendering del pulsante di votazione quando cambio solo voteStatus?

risposta

7

Avere una sottoview all'interno del proprio AnswerView che è responsabile solo per il rendering delle frecce di voto, VotingArrowsView. Si potrebbe inizializzare questa visualizzazione secondaria all'interno della funzione di initializeAnswerView e poi anteporre della visualizzazione secondaria el al di vista padre el quando render ing vista primaria:

var AnswerView = Backbone.View.extend({ 
    initialize: function(options){ 
    this.template = _.template($('#answerTmpl').html()); 
    this.votingArrowsView = new VotingArrowsView({ model: this.model }); 
    ... 
    }, 
    render: function(){ 
    this.$el.html(this.template(this.model.toJSON())); 
    this.$el.prepend(this.votingArrowsView.render().el); 
    return this; 
    }, 
    ... 
}); 

var VotingArrowsView = Backbone.View.extend({ 
    initialize: function(options){ 
    this.template = _.template($('#votingArrowsTmpl').html()); 
    this.listenTo(this.model, 'change:voteStatus', this.render); 
    }, 
    render: function(){ 
    this.$el.html(this.template(this.model.toJSON())); 
    return this; 
    } 
}); 
+0

Questo funziona bene, grazie mille! – Robin

+0

Ma ho un'altra domanda, penso che potrei spostare gli eventi click di voteButton (clicca voteUp e voteDown) da 'AnswerView' a' VotingArrowsView'. quando faccio questo e clicco sul pulsante, non funziona. Sembra che l'ascolto dell'evento sia rotto. Potresti dirmi perché? – Robin

+1

Uso 'this.delegateEvents();' in 'VotingArrowsView' quando' render'. Tutto fatto! grazie :) – Robin

Problemi correlati