2013-08-20 24 views
5

mam widok Backbone gdzie className jest ustawiany dynamicznie funkcję:Ustaw dynamicznie ClassName na widok Backbone renderowanie

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; 
    }, 

Kiedy aktualizacji modelu widoku I wyzwolić zdarzenie change który generujemy widok . Problem polega na tym, że nazwa klasy nie jest obliczana ponownie przy renderowaniu ... Jak mogę przeliczyć nazwę klasy podczas renderowania widoku?

Ktoś ma pomysł? Dzięki

Odpowiedz

6

Będziesz musiał zaktualizować swój class ręcznie po metodzie render. Backbone inicjuje className elementu swojego widoku tylko jeden raz w trakcie sposobu _ensureElement:

_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); 
     } 
} 

Jeśli spojrzeć ma kontrolę w przypadku element już istnieje. W każdym razie, można to zrobić ręcznie w sposób render:

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

Wspaniałe, wielkie dzięki! – user2568596

+4

alert przesadny, wszystko co musisz zrobić, to 'this. $ El.addClass ('classname')' przed wyświetleniem widoku. –

+1

Chyba, że ​​robisz coś bardziej skomplikowanego niż dodawanie klasy (dodawanie niektórych, przełączanie niektórych itd.). Z tego powodu nie jest przesadą, jest solidny. –