如何根据Backbone.js视图的模型属性动态地设置它的className?

yacmzcpb  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(132)

基本上我需要做的就是

App.CommentView = Backbone.View.extend({
  className: function() {
    if (this.model.get('parent_id')) {
      return 'comment comment-reply';
    } else {
     return 'comment';
    }
  },

问题是,传递给className的函数是在视图模板的html上下文中执行的,所以我不能调用this.model
在渲染过程中,是否有任何方法可以在此时访问模型?或者我是否需要稍后设置类,例如在render函数中?

omqzjyyz

omqzjyyz1#

这听起来像是模型绑定的作业。

App.CommentView = Backbone.View.extend({
  initialize: function () {
      // anytime the model's name attribute changes
      this.listenTo(this.model, 'change:name', function (name) {
          if (name === 'hi') {
             this.$el.addClass('hi');
          } else if......
      });
  },
  render: function () {
       // do initial dynamic class set here
  }
b1zrtrql

b1zrtrql2#

您应该使用属性散列/函数:

attributes: function () {
 //GET CLASS NAME FROM MODEL
 return { 'class' : this.getClass() }
},
getClass: function() {
   return this.model.get('classname')
}
6ie5vjzr

6ie5vjzr3#

我认为使用this.$el.toggleClass或简单地在render中添加类会容易得多。
但是,如果要在构造视图时设置类,则可以将其作为选项传递:

view = new App.CommentView({
  model: model,
  className: model.get('parent_id') ? 'comment comment-reply' : 'comment'
})
c8ib6hqw

c8ib6hqw4#

我是在View初始化时执行的

App.CommentView = Backbone.View.extend({
    initialize: function() {
        if(this.model.get("parent_id"))
            this.$el.addClass("comment-reply");
    },

相关问题