2013-08-20 37 views
5

我已經在類名和一個函數動態設置一個骨幹視圖:設置動態類名的骨幹視圖渲染

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

當我更新視圖模型我觸發誰渲染視圖改變事件。 問題是,不使用渲染重新計算className ... 如何在我渲染視圖時重新計算className?

任何人有想法? 謝謝

回答

6

你必須手動更新classrender方法。骨幹只有一次時間在_ensureElement方法初始化您的視圖元素的className

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

如果你看一看它在的元素已經存在時,檢查。 無論如何,你可以手動在render方法中做到這一點:

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

精彩,非常感謝! – user2568596

+4

過度警報,在顯示視圖之前,您需要做的就是'this。$ el.addClass('classname')'。 –

+1

除非你正在做一些比添加類更復雜的東西(添加一些,切換一些等)。出於這個原因,它不是矯枉過正,它是強大的。 –