骨干处理模型,如集合

时间:2016-10-25 14:10:04

标签: javascript jquery backbone.js

由于集合实际上是一个模型,它具有属性等,就像在这个例子中一样

var Images = Backbone.Collection.extend({
  url: 'https://api.myjson.com/bins/4v2d8'
});

var View = Backbone.View.extend({
  el: $('.images'), 

  initialize: function(){
    this.listenTo(this.collection, 'sync', this.render, this); // what is this keyword as the last param here?
  },

  render: function(){

    this.collection.each(function(model){
      this.$el.append($('<p>'+model.get('name')+'</>' ));
    }, this);

  }
});

$(function(){

  var images = new View({ collection: new Images() });

  images.collection.fetch();

});

http://jsbin.com/gohedeguto/edit?html,js,output

但为什么这个不起作用?

http://jsbin.com/seyoyeqeku/edit?html,js,output

我将Collection替换为Model并传递给了视图。我得到this.model.each of undefined

2 个答案:

答案 0 :(得分:2)

虽然T-J是对的,但他并没有详细说明原因。

Backbone模型有很多功能来管理attributes hash,并且通常由id引用。

Backbone集合是Backbone模型实例的数组。它有一些类似的和许多不同的函数来管理模型实例存储的models array property

其中一些功能是Underscore.js功能的代理。

Model's Underscore methods

  • 反转
  • 选择
  • 省略
  • chain
  • 的isEmpty

Collection's Underscore methods

目前共有46个,请参阅清单。

collection.each(iteratee, [context])

_.each(collection.models, iteratee, [context])的代理。

Backbone的模型没有each函数,因为它没有真正意义,并且有更好的方法来遍历模型的属性。

答案 1 :(得分:0)

  

由于集合实际上是一个模型

没有。这是错误的假设。收集不是一个模型,这就是为什么你的代码不起作用的原因。

模型没有每个方法,并且您的代码会抛出以下错误:

Uncaught TypeError: this.model.each is not a function(…)

并且不要遵循迭代模型属性并打印其名称的其他答案,它没有意义。因为模型应该代表一个实体,就像一个人。它只有一个包含名称的属性,迭代模型属性以访问其中一个属性没有意义,您可以使用get()方法直接访问它的属性而无需迭代。