Backbone.js的抓取一个更复杂的数据,并使用作为一个集合(Backbone.js Fetch

2019-06-23 10:07发布

假设我有一个这样的JSON设置:

{
  page:1,   
  items:[
    {  
      name: 'item1', 
      id:1
    }, 
    {
      name: 'item1', 
      id:2
    }, 
    {
      name: 'item1', 
      id:3
    }
  ] 
}

并且这样的造型:

var Item = Backbone.Model.extend({
    defaults: {name:  "No name"}
});

var ItemCollection = Backbone.Collection.extend({
    model: Item,
    url: '/some/ajax/url',
});

获取此JSON之后,我怎么能映射设置为ItemCollection收集的项目,并添加页码为集合属性?

Answer 1:

作为@asawyer提到的,你必须覆盖的解析方法,但你并不需要真正实例化的每个项目,骨干网可以为你做的,如果你回到项目的数组。

请参阅文件collection.parse

解析 collection.parse(response)

解析由骨干每当集合的模型是由服务器返回,在获取调用。 所述函数传递原始响应对象,并且应该返回模型的阵列属性被添加到集合。

您的代码可以写成

var ItemCollection = Backbone.Collection.extend({
    model: Item,
    url: '/some/ajax/url',

    parse: function(data) {
        this.page=data.page;
        return data.items;
    }
});


Answer 2:

你需要重写解析

它最终会看起来像这样:

class Item extends Backbone.Model
    defaults:
        name: "No name"

class ItemCollection extends Backbone.Collection
    model: Item
    url: '/some/ajax/url'
    parse: (data) ->
        items = []
        _.each data, (item) ->
            newItem = new Item
                id: item.id
                name: item.name
            items.push newitem
        items

(CoffeeScript的,但很容易转化为直接的JavaScript)

您的其他选项的关系插件发现在:

https://github.com/PaulUithol/Backbone-relational

我从来没有使用它,但它应该做的解析映射的东西给你,我认为。



文章来源: Backbone.js Fetching a more complex data and using as a collection
标签: backbone.js