0

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

<tr class="inactive">

这就是我所拥有的。“不活动”是默认值。结果渲染是所有 tr 元素都具有“非活动”类

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.modelrender

4

2 回答 2

0

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

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

然后,您无需担心它可能会更改的其他任何地方,并且您的代码更少。

编辑:

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

如何根据模型属性为 Backbone.js 视图动态设置类名?

于 2013-09-28T18:39:08.837 回答
0

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

  render: function() {

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


  }
于 2013-10-05T23:26:43.627 回答