javascript - Backbone.js JSON 结构

标签 javascript json backbone.js data-structures

我对如何使用具有 Backbone 的 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 我的集合时,返回了数据,但不适合。我如何使用 backbone 来适应这个 json 结构?

更新

像这样覆盖集合的解析方法(感谢 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 映射到我的集合模型?

最佳答案

由于您的 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/

关于javascript - Backbone.js JSON 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916438/

相关文章:

iphone - Backbone.js 适用于移动设备吗?

javascript - 如何防止原型(prototype)显示在数组上

javascript - 使用 jquery 迭代 xml 在 FF 中工作正常,但在 IE 中则不行

javascript - 切换后将最大高度分配给内部元素

javascript - 如何将键/值对字符串转换为 JSON 对象?

java - 有没有办法替换 .json 文件内字符串中的括号?

javascript - 新的 Backbone.Model() 与 Backbone.Model.extend()

javascript - jQuery 与 MooTools 冲突

json - 复制 json 文件时出现 Amazon Redshift 错误 - 无效的 JSONPath 格式 : Member is not an object

javascript - Marionette.CompositeView 中 serializeData 和 onRender 的区别