【问题标题】:Backbone.js JSON StructureBackbone.js JSON 结构
【发布时间】:2014-09-18 15:13:00
【问题描述】:

我对如何使用带有主干的 API 的 JSON 结构感到困惑。

无法控制 api 的结构(它是来自 wordpress 插件 - woocommerce 的 REST api)。

我对 Backbone 的经验相对较少,我自己创建的每个 json api 都有以下结构:

[
    {
        "id": "1",
        "name": "John",
        "email": "john@example.com",
        "order_number": "#3473388"
    },
    {
        "id": "2",
        "name": "Jane Doe",
        "email": "jane@example.com",
        "order_number": "#8877632"
    }
]

对象数组,漂亮又简单!

但是, 我现在使用的 api 的结构具有以下结构:

{
    "orders": [
        {
            "id": 130259,
            "name": "John Doe",
            "email": "john@example.com",
            "order_number": "#3473388"
        },
        {
            "id": 130259,
            "name": "Jane Doe",
            "email": "jane@example.com",
            "order_number": "#3473388"
        }
    ]
}

这是我的订单模型:

App.Models.Order = Backbone.Model.extend({

    defaults: {
        id: '',
        name: '',
        email: '',
        order_number: ''
    }

});

这是我的订单集:

App.Collections.Orders = Backbone.Collection.extend({

    model: App.Models.Order,

    url: 'http://api.example.com/orders'

});

我的模型/集合的结构和api没有很好的映射,当fetching我的集合时,返回了数据,但是不适合。如何使用骨干网来适应这种 json 结构?

更新

像这样覆盖集合上的 parse 方法(感谢 Yura)返回数据:

App.Collections.Orders = Backbone.Collection.extend({

    model: App.Models.Order,

    url: 'http://api.example.com/orders',

    parse: function( resp ){
        return resp.orders;
    }

});

返回的数据是多维的,如下所示:

[
    {
        "id": 130285,
        "order_number": "#130285",
        "billing_address": {
            "first_name": "John",
            "last_name": "Doe",
            "company": "",
            "address_1": "13 Green Willow",
            "address_2": "",
            "city": "Celbridge",
            "state": "Kildare",
            "postcode": "",
            "country": "IE",
            "email": "johndoe@hotmail.com",
            "phone": "87384348043"
        }
    }
]

在 parse 方法中,如何将多维 json 映射到我的集合的模型?

【问题讨论】:

  • 您需要覆盖模型的parse 方法。

标签: javascript json backbone.js data-structures


【解决方案1】:

由于您的 API 返回可用于初始化模型的对象数组,因此您可以在您的集合上使用 parse,如下所示:

App.Collections.Orders = Backbone.Collection.extend({

    model: App.Models.Order,

    url: 'http://api.example.com/orders',

    parse: function( resp ){
        return resp.orders;
    }

});

如果您的 API 返回纯对象数组,则不需要parse
Collection.parse 的文档:http://backbonejs.org/#Collection-parse

更新

如果您需要将单个对象解析为模型键,您可以在模型上添加 parse 方法并返回对象,其中键将是模型的键和从响应中传递的值。

我创建了一个 jsfiddle 用于演示:http://jsfiddle.net/yuraji/x62jje39/

【讨论】:

  • 谢谢尤拉。这对我有用。我得到的数据是多维json。我如何将我的收藏模型映射到这个结果?我更新了我的问题以便更好地解释。
  • 您可以在 parse 方法中将您的 json 数据映射到模型键,这基本上就是它的用途。您准备根据模型键和return 命名键的对象。但请注意,现在您需要在模型上创建 parse 方法,该方法会将单个对象处理为模型数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2021-12-29
  • 2022-01-09
  • 2019-07-04
相关资源
最近更新 更多