2013-08-20 3 views
5

Я вид Backbone, где имя класс устанавливается динамически с помощью функции:Установить динамически Classname на просмотре Backbone визуализации

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 не пересчитывается с помощью рендеринга ... Как я могу пересчитать имя класса при визуализации представления?

У кого-нибудь есть идея? Спасибо

ответ

6

Вам необходимо будет обновить ваш class вручную после метода render. Магистральный инициализирует className элемента вашего View только один момент времени в течение метода _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); 
     } 
} 

Если вы посмотрите у него есть чек в случае уже существует элемент. Во всяком случае, вы можете сделать это вручную в методе render:

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

Замечательно, спасибо большое! – user2568596

+4

overkill alert, все, что вам нужно сделать, это 'this. $ El.addClass ('classname')' перед представлением. –

+1

Если вы делаете что-то более сложное, чем добавление класса (добавление некоторых, переключение некоторых и т. Д.). По этой причине это не слишком много, это здорово. –

Смежные вопросы