3

codeschool の backbone.js チュートリアルの 1 つの例には、次のソリューションがあります。

アプリケーション.js

var appointment = new Appointment({id: 1});

appointment.on('change',function() {
  alert('its changed');
});

これはおそらく単純化された例だと思いますが、ほとんどの場合、モデル定義でこれを定義したくないので、すべてのモデル インスタンスに適用されますか?

私のインスタンスが変更されるたびにビューでこのメソッドを起動するモデル定義の何か?そのビュー メソッドはアラートを発生させる可能性があります。

私は明らかに学んでいるので、どんな助けも大歓迎です!

4

1 に答える 1

1

ここで、イベントはその特定のモデル インスタンスに関連付けられます。したがって、同じことが他のインスタンスのイベントをトリガーすることはありません..

var appointment = new Appointment({id: 1}); <--- Event is triggered

var appointment1 = new Appointment({id: 2}); <--- Event is not triggered

appointment.on('change',function() {
  console.log('its changed');
});

イベントはモデルのインスタンスに直接アタッチされているためです。ただし、モデルを定義するときに同じことを行うと、モデルのすべてのインスタンスで同じことがトリガーされます。

var Appointment = Backbone.Model.extend({
     initialize: function() {
         this.on('change', function() {
             console.log('its changed')
         });
     }
}); 

モデルのインスタンスが変更されると、イベントがトリガーされます。

var appointment = new Appointment({id: 1}); <--- Event is triggered

var appointment1 = new Appointment({id: 2}); <--- Event is triggered

ビューで同じことを話している場合、インスタンスに渡されるモデルは通常、イベントをリッスンし続けます。変更があれば、ビューの状態を変更するメソッドが呼び出されます。

var View = Backbone.View.extend({

     initialize: function() {
         // Listening to the event on the model which when 
         // triggered will render the view again
         this.listenTo(this.model, 'change', this.render);
     },
     render: function() {

         // do something
     }
});

var view = new View();

view.render();
于 2013-07-28T17:56:41.860 に答える