当前位置: 首页 > 知识库问答 >
问题:

脊梁骨js获取更复杂的数据并用作集合

钱展
2023-03-14

假设我有这样一个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集合的项映射并将页码作为属性添加到集合中?

共有2个答案

云宝
2023-03-14

你需要重写解析

它最终会看起来像这样:

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

我从未使用过它,但我想它应该可以为你做解析映射。

宗建章
2023-03-14

正如@asawyer所提到的,您必须重写parse方法,但不需要实际实例化每个项,如果您返回项数组,主干可以为您这样做。

看留档collection.parse

解析集合。解析(响应)

每当服务器在fetch中返回集合的模型时,主干就会调用parse。函数传递原始响应对象,并应返回要添加到集合中的模型属性数组。

您的代码可以写成

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

    parse: function(data) {
        this.page=data.page;
        return data.items;
    }
});
 类似资料:
  • 使用Backbone.js作为Rails应用的前端框架。就Rails模型而言,我有一个发布模型和一个文章模型。每个出版物与许多文章相关联,并且每个文章只属于一个出版物。当用户决定删除一个出版物时,我希望所有相关的文章也被删除。我说的删除是指从数据库中删除。 以下代码适用于从数据库中删除指定的发布,但不适用于删除关联的项目: 我还试着移动这些文章。destroy()行在success函数中,但这也不

  • 我正在从xml提要创建主干集合。xml提要返回110篇文章(它是外部的,无法返回更少的文章)。我加载到主干集合中,如下所示: 然后,我在列表底部显示带有“加载更多”按钮的前10个项目。当用户单击“加载更多”时,我想从主干集合中加载接下来的10个项目。在视图中,我这样做: 因此,each循环遍历前10个项目,跳过它们,因为它们已经加载(并且小于最后一个li子项的id),然后在接下来的10个项目上创建

  • 问题内容: 我有一个标准的javascript ajax调用,其中将data:设置为json数据。 我试图在php中获取数据,这是行不通的。 但是,可行。 我想知道这可能是我的框架或诸如此类的无法正常工作的东西吗?还是还有其他我可以用来获取数据的东西? 编辑: 因此,框架YII和扩展Restfullyii具有使用一种方法获取其数据的方法return json_decode(file_get_con

  • 问题内容: 我有一个收藏,其中包含一些用户。需要的一些信息是总数,页数等。如何将这些信息传递回客户端?还是它们必须来自一个单独的视图,在这种情况下,我将需要多个ajax调用?我想拥有该集合,并且还接收一些“元数据”。什么是处理此问题的好方法? 问题答案: 通常,您需要在集合类的parse方法中进行处理。它的职责是获取响应并返回一系列模型属性。但是,如果您不希望使用parse方法承担额外的责任,则可

  • 当我尝试发送请求时“http://localhost:1234/api/case/create?signature=123456“从Postman(谷歌扩展)使用body请求中的“表单数据”,我得到错误: “消息”:“此资源不支持请求实体的媒体类型‘多部分/表单数据’。”,“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为“multipart/for

  • 我有一个JS对象,如下所示。每当表单元素发生任何更改时,我都想更新它。但由于名称大括号没有转换为数组,所以所有输入名称都作为字符串附加。 我有大约100个元素,包括输入、选择、单选、复选框等。我正在寻找一种动态的方法,无论何时更新任何元素,都可以更新对象。 HTML表单元素 要更新的JS对象 我所尝试的