将视图绑定到backbone.js中的集合

时间:2013-03-08 17:13:28

标签: backbone.js backbone-views backbone-events backbone.js-collections

我是骨干半新人。我尝试将集合绑定到视图,以便在将新模型添加到集合时更新视图。我认为当您使用模型执行此操作时,您可以绑定到模型的更改事件。但是你如何对收藏品做同样的事情?

App.Views.Hotels = Backbone.View.extend({

    tagName: 'ul',

    render: function() {
        this.collection.each(this.addOne, this);
        var floorplanView = new App.Views.Floorplans({collection:floorplanCollection});
        $('.floorplans').html(floorplanView.render().el);
        return this;
    },

    events: {'click': 'addfloorplan'},

    addOne: function(hotel) {
        var hotelView = new App.Views.Hotel ({model:hotel});
        this.$el.append(hotelView.render().el);
    },

    addfloorplan: function() {
        floorplanCollection.add({"name": "another floorplan"});
    }
});

App.Collections.Floorplans = Backbone.Collection.extend({
    model: App.Models.Floorplan,
    initialize: function () {
        this.bind( "add", function() {console.log("added");} );
    }
});

点击事件会触发并添加到集合中。但是如何让它更新视图呢?

2 个答案:

答案 0 :(得分:3)

您可以收听该集合的add事件,在将新项目添加到集合时触发。在Backbone的现代版本中,方法listenTo优先于bindon来监听事件。 (Read de documentation for more info

例如,在你的情况下,这应该可以解决问题:

App.Views.Hotels = Backbone.View.extend({

  initialize: function() {
    this.listenTo(this.collection,'add', this.addOne);
  },
  //rest of code

希望这有帮助!

答案 1 :(得分:2)

这是我很久以前所遵循的一个很好的教程。

An Intro to Backbone.js: Part 3 – Binding a Collection to a View

它可以帮助你定义一个DonutCollectionView,当给出一组甜甜圈时,它会为每个甜甜圈渲染一个UpdatingDonutView。