2013-08-20 19 views
5

Ich habe eine Backbone-Ansicht, wo der Klassenname dynamisch mit einer Funktion gesetzt:Set Render auf Backbone Ansicht dynamisch Klassennamen

app.Views.ItemRequestView = Backbone.View.extend({ 

    tagName  : 'tr', 

    className : function(){ 

     var classRow = ''; 

     if(this.model.getState() == app.Models.Request.status.wait.key) { 
      classRow = app.Models.Request.status.wait.color + ' bolder'; 
     } 
     else if(this.model.getState() == app.Models.Request.status.confirm.key){ 
      classRow = app.Models.Request.status.confirm.color + ' bolder'; 
     } 

     return classRow; 
    }, 

Als ich das Modell der Ansicht aktualisiere ich löse eine Ereignisänderung, die die Ansicht machen . Das Problem ist, dass der Klassenname nicht mit dem Rendern neu berechnet wird ... Wie kann ich den Klassennamen neu berechnen, wenn ich die Ansicht rende?

Wer hat eine Idee? Danke

Antwort

6

Sie müssen Ihre class manuell nach der render Methode aktualisieren. Backbone initialisiert die className des Elements Ihrer Ansicht nur einmal Zeit während der _ensureElement Methode:

_ensureElement: function() { 
     if (!this.el) { 
     var attrs = _.extend({}, _.result(this, 'attributes')); 
     if (this.id) attrs.id = _.result(this, 'id'); 
     if (this.className) attrs['class'] = _.result(this, 'className'); 
     var $el = Backbone.$('<' + _.result(this, 'tagName') + '>').attr(attrs); 
     this.setElement($el, false); 
     } else { 
     this.setElement(_.result(this, 'el'), false); 
     } 
} 

Wenn Sie einen Blick nehmen es hat einen Scheck bei dem Elemente bereits vorhanden ist. Wie auch immer, können Sie das manuell in Ihrer render Methode tun:

render: function(){ 
    //Your logic 
    this.$el.attr('class', _.result(this, 'className')); 
} 
+0

Wunderbar, vielen Dank! – user2568596

+4

overkill alert, alles, was Sie tun müssen, ist dies. $ El.addClass ('Klassenname') ', bevor die Ansicht angezeigt wird. –

+1

Es sei denn, Sie tun etwas komplizierter als das Hinzufügen einer Klasse (Hinzufügen einiger, Umschalten einiger, etc). Aus diesem Grund ist es nicht übertrieben, es ist robust. –

Verwandte Themen