3

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

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");} );
    }
});

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

4

2 回答 2

3

您可以收听集合的add事件,该事件在将新项目添加到集合时触发。在现代版本的 Backbone 中,该方法listenTo更适用于bindon用于监听事件。(阅读de文档了解更多信息

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

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

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

希望这可以帮助!

于 2013-03-08T18:15:57.677 回答
2

这是我很久以前关注的一个很好的教程。

Backbone.js 简介:第 3 部分 - 将集合绑定到视图

它可以帮助您定义一个 DonutCollectionView,当给定一个甜甜圈集合时,它将为每个甜甜圈呈现一个 UpdatingDonutView。

于 2013-03-08T18:10:39.157 回答