6

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;
    },

ビューのモデルを更新すると、ビューをレンダリングする変更イベントがトリガーされます。問題は、クラス名がレンダリングで再計算されないことです...ビューをレンダリングするときにクラス名を再計算するにはどうすればよいですか?

誰にもアイデアがありますか?ありがとう

4

1 に答える 1

8

メソッドclassの後に手動で更新する必要があります。renderバックボーンは、メソッドclassName中に一度だけビューの要素を初期化します。_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'));
}
于 2013-08-20T09:07:01.447 に答える