我对如何使用具有 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/