Have view listen to collection event

2019-03-15 15:47发布

I have a view myView and a collection myCollection. When I add a model to myCollection, the add event is triggered by myCollection. How can I have myView listen to that add event?

标签: backbone.js
3条回答
干净又极端
2楼-- · 2019-03-15 16:20

After ver. 0.9.9 (added Dec. 13, 2012) it is recommended to use listenTO.

In line with this:

var MyView = Backbone.View.extend({

    initialize: function() {
        this.listenTo(this.collection, 'add', this.onModelAdd);
    },
    onModelAdd: function(model) {
        // do something
    }
});

var myCollection = new MyCollection();
var myView = new MyView({collection: myCollection});
查看更多
Emotional °昔
3楼-- · 2019-03-15 16:21

You have to bind your view to listen on the "add" event of your collection:

var MyView = Backbone.View.extend({
    initialize: function(){
        this.collection.bind('add', this.somethingWasAdded, this)
    },
    somethingWasAdded: function(){

    }
});
new MyView({collection: myCollection})
查看更多
The star\"
4楼-- · 2019-03-15 16:40

You can pass the collection to the view when you instantiate it, and then you can have the view bind to the add event on the collection in the initialize method.

Here's a code example

MyView = Backbone.View.extend({
  initialize: function() {
    this.collection.bind('add', this.onModelAdded, this);
  },

  ...other view functions

  onModelAdded: function(addedModel) {
    //do something
  }
}

And this is how you pass the collection in when you instantiate the view

var view = new MyView({ collection: myCollection });
查看更多
登录 后发表回答