为什么我的视图复制了我在backbone.js中传递的集合?

krugob8w  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(137)

我刚刚开始学习Backbone.js,我创建了几个简单的例子作为参考。我发现了一个简单的JSON api,它将返回一个用户列表。JSON响应包含一些元数据和一个包含三个用户的数组。在将我的集合绑定到我的视图后,我还剩下三个额外的用户集。
JS Fiddle

row_template = "<tr>" +
  "<td class='id'></td>" + 
  "<td class='first_name'></td>" +
  "<td class='last_name'></td>" +
  "<td><img class='avatar'></td>"+
  "</tr>"

var UsersView = Backbone.View.extend({
  row_template: row_template,

  initialize: function(options) {
    this.factory = new Backbone.CollectionBinder.ElManagerFactory(this.row_template, this.bindings);
    this.listenTo(options.collection, 'add', this.render);
  },

  render: function () {
    var data = this.collection;
    new Backbone.CollectionBinder(this.factory).bind(data, $('#' + this.el.id + ' table tbody'));
  },

  bindings: {
    first_name: {selector: '.first_name', elAttribute: 'text'},
    last_name: {selector: '.last_name', elAttribute: 'text'},
    avatar: {selector: '.avatar', elAttribute: 'src'},
    id: {selector: '.id', elAttribute: 'text'}
  }
});

var UsersCollection = Backbone.Collection.extend({
  url: 'https://reqres.in/api/users',
  parse: function(response) {
    return response.data;
  }
});

users = new UsersCollection();
users.fetch()

var UsersView = new UsersView({
  el: $('#UsersHolder'),
  collection: users
});

UsersView.render();
ioekq8ef

ioekq8ef1#

集合中的每个模型都会发出集合事件“add”。因为集合中有三个模型,所以render函数会被调用3次,每个模型调用一次。

溶液

将'add'替换为'update',对于集合的任何更改,它只触发一次,而不管模型的数量。

this.listenTo(options.collection, 'update', this.render);

相关问题