backbone.js标记名在渲染中的类名

时间:2013-09-28 18:21:01

标签: javascript backbone.js

我试图根据模型isActive属性设置一个“非活动”或“活动”类的元素。

<tr class="inactive">

而且我拥有的是什么。 '无效'是默认值。生成的渲染是所有tr元素都具有'inactive'类

var ItemView = Backbone.View.extend({

   tagName: "tr",
   className: 'inactive',


   render : function() {
       this.className = this.model.get('Active') ? 'active' : 'inactive';

       ...


       this.$el.html( this.template(data) );
   }

});

找到一些小字体

  className: function() {
     var el = this.model.get('Active') ? 'active' : 'inactive';   // Set active flag in class
     return el;
  },

但是,现在得到错误:'this.model' is undefined建议在初始化之前运行className函数。我使用默认的初始化程序。 this.model中的render从未出现过问题。

2 个答案:

答案 0 :(得分:0)

如果您要检查模型是否处于活动状态,为什么还要打扰使用默认的className?在我看来,如果你在渲染函数时设置它,你会跳过默认值。此外,将className添加到模板中可能更容易:

template: _.template('<tr class="<% active ? 'active' : 'inactive' %>">...</tr>');

然后,您无需担心其他任何地方可能会发生变化而且代码更少。

编辑:

这是一个链接,它提供了另一种动态侦听属性更改和更新视图的方法:

How can I dynamically set a className for a Backbone.js view based on it's model attributes?

答案 1 :(得分:0)

我使用jquery addClass添加了运行时类名。

  render: function() {

     var isactive = this.model.get("Active") ? "" : "inactive";
     this.$el.removeClass('inactive').addClass(isactive);


  }