10

基本的に私が必要とするのは、このようなことをすることです

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または、関数などで後でクラスを設定する必要がありますか?

4

4 に答える 4

14

これは、モデル バインディングの仕事のように思えます。

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
  }
于 2012-03-31T14:58:23.177 に答える
3

属性ハッシュ/関数を使用する必要があります。

attributes: function () {
 //GET CLASS NAME FROM MODEL
 return { 'class' : this.getClass() }
},
getClass: function() {
   return this.model.get('classname')
}
于 2012-11-07T21:29:41.397 に答える
2

this.$el.toggleClassクラスを使用するか、単純に内部に追加する方がはるかに簡単だと思いますrender

ただし、ビューを構築するときにクラスを設定する場合は、オプションとして渡すことができます。

view = new App.CommentView({
  model: model,
  className: model.get('parent_id') ? 'comment comment-reply' : 'comment'
})
于 2012-03-31T14:28:07.953 に答える