0

私は次のバックボーンビューを持っています。疑問がありました。モデルが削除された場合、キャンセル後にレンダリングを呼び出します(最初のアプローチ)。別の方法は、ビュー内でイベントの変更をリッスンするモデルをレンダリングする初期化関数を使用することです(2番目のアプローチ)。 )。

誰かが私に知らせてくれませんか、1と2の違い。2つのうちどちらが良いかについて。

最初のアプローチ varAppointmentView= Backbone.View.extend({template:_.template('">' +'<%= title%>' +'x')、

  events:  { "click a": "cancel" },
  cancel: function(){
    this.model.cancel();
    this.render(); // rendering after cancel
  },
  render: function(){
    this.$el.html(this.template(this.model.toJSON()));
  }
});

2番目のアプローチ

var AppointmentView = Backbone.View.extend({
  template: _.template('<span class="<% if(cancelled) print("cancelled") %>">' +
                        '<%= title %></span>' +
                        '<a href="#">x</a>'),
  initialize: function(){
    this.model.on("change", this.render, this);
  },
  events:  { "click a": "cancel" },
  cancel: function(){
    this.model.cancel();
  },
  render: function(){
    this.$el.html(this.template(this.model.toJSON()));
  }
});
4

1 に答える 1

0

カスタム イベントを定義し、それをメソッドcancelledからトリガーしcancel、ビューでそのイベントにバインドします。

var Appointment = Backbone.Model.extend({
  cancel: function() {
    //cancellation code...
    this.trigger('cancelled', this);
  }
});

var AppointmentView = Backbone.Model.extend({
  initialize: function() {
    this.listenTo(this.model, 'cancelled', this.render);
  }
});

このようにして、モデルがビュー自体以外の場所からキャンセルされた場合でも、ビューは再レンダリングされますがcancel、すべての変更ではなく、特定の動作または再レンダリングのみが得られます。

于 2013-02-19T09:40:55.753 に答える