2013-08-20 15 views
5

Ben className bir fonksiyonu dinamik olarak ayarlanmış bir Omurga görünümünü ettik:dinamik hale Backbone görünümü ClassName ayarlayın

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

Ben görünümü oluşturur bir değişiklik olayı tetiklemek bakış modelini güncellemek . Sorun, className render ile yeniden hesap değil ... Görünümü oluştururken className nasıl yeniden hesaplayabilirim?

Herkesin bir fikri vardır? Teşekkürler

cevap

6

render yönteminden sonra class kodunuzu manuel olarak güncelleştirmeniz gerekir. Omurga sadece bir kez zaman _ensureElement yöntemle sırasında View elemanın className başlatır:

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

Eğer bir göz atacak olursak o eleman zaten var olması durumunda bir çek var. Neyse , kendi render yöntemde manuel bunu yapabilir:

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

Harika sayesinde bir sürü! – user2568596

+4

overkill uyarısı, yapmanız gereken tek şey 'this. $ El.addClass ('classname')' görünüm görüntülenmeden önce. –

+1

Sınıf eklemekten (bazılarını eklemek, bazılarını değiştirmek vb.) Daha karmaşık bir şey yapmıyorsanız. Bu sebeple aşırı değil, sağlam. –

İlgili konular