2013-08-20 31 views
5

Tôi đã nhìn Backbone nơi className được thiết lập tự động với một chức năng:Set động classname trên xem Backbone làm

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

Khi tôi cập nhật các mô hình của các quan điểm tôi kích hoạt một sự kiện thay đổi người làm cho xem . Vấn đề là className không tính toán lại với kết xuất ... Làm cách nào tôi có thể tính toán lại className khi tôi hiển thị chế độ xem?

Có ai có ý tưởng không? Cảm ơn

Trả lời

6

Bạn sẽ phải cập nhật class theo cách thủ công sau phương thức render. Backbone khởi tạo className của phần tử của Xem chỉ một lần thời gian trong phương pháp _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); 
     } 
} 

Nếu bạn có một cái nhìn nó có một tấm séc trong trường hợp của nguyên tố này đã tồn tại. Dù sao, bạn có thể làm điều đó theo cách thủ công theo phương pháp render:

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

Tuyệt vời, cảm ơn rất nhiều! – user2568596

+4

cảnh báo quá mức, tất cả những gì bạn cần làm là 'this. $ El.addClass ('classname')' trước khi xem được hiển thị. –

+1

Trừ khi bạn đang làm một cái gì đó phức tạp hơn so với thêm một lớp học (thêm một số, toggling một số, vv). Vì lý do đó, nó không phải là quá mức cần thiết. –

Các vấn đề liên quan