如何使用 Backbone 读取通过同一 REST URL 返回的两个不同对象
How to read two different objects returned via the same REST URL using Backbone?
我有一个 REST URL,比如
/users/<user_id>/entities
其中返回 2 个对象:
{
"players":
{
"test_player2":
{
"_id": "test_player2",
"user": "f07590567f3d3570b4f35b4fd79f18b3"
},
"test_playerX":
{
"_id": "test_player2",
"user": "f07590567f3d3570b4f35b4fd79f18b3"
}
},
"games":
{
"game1" :{},
"game2" :{},
}
}
如何设计主干对象以使用此数据?
要求:我想要两个不同的主干对象:玩家和游戏,它们应该通过相同的 url(如上所述)填充。
PS:设计这种 REST URL 甚至是一种正确的做法吗?
设计这种 REST URL 甚至是一种正确的做法吗?
不,这不是正确的做法。在 REST 中,单个 URL 应该表示单个资源。因此,您的/users/<user_id>/entities
URL 应/users/<user_id>/players
且仅返回玩家列表,/users/<user_id>/games
且仅返回游戏列表。
但是,有时可能无法控制 API 返回的内容。通常,嵌套对象就是这种情况(您可以使用现有对象来执行此操作,但理想情况下,您需要更改 API):
{
"players":
{
"id": 1,
"games":
{
"id": 1745,
"title": "Team Fortress 2"
}
}
}
在这种情况下,您将使用模型的parse
函数,如下所示:
parse: function(response)
{
// Make sure "games" actually exists and is an array to make a collection from
if(_.isArray(response.games))
{
// Backbone will automatically make a collection of models from an array
// Use {parse: true} if you want the receiving collection to parse as if a fetch had been done
this.games = new GamesCollection(response.games,{parse: true});
}
}
通过覆盖parse
并使用{parse:true}
,您可以几乎无限期地构建模型。这样做不一定是理想的(这个想法是每个集合负责自己的模型),但它适用于获取复合对象并且无法更改 API 返回的内容的情况。
相关文章:
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 正在更新mongod中两个对象内部的数组
- 添加两个对象以获取值的总和
- 如何使用javascript合并两个对象数组
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 如何对两个嵌套对象进行排序
- 在JavaScript中相等两个对象.在更改一时,秒会自动更改
- js字符串转换为具有两个值的对象
- 如何使用AngularJs比较两个对象的JSON
- jQuery对象从html表中查询为两个一维数组,用于Chartist图表
- 交换对象上两个属性的值
- Backbone relational无法实例化两个RelationalModel对象
- 如何在javascript中合并两个对象数组
- 删除两个独立对象中的属性,而不使用多余的删除语句
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- 有可能让两个变量指向同一个对象吗?(javascript)
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- 如何在Javascript中连接两个结构不同的对象
- 如何使用jQuery合并两个json对象
- 如何按对象两个值对对象数组进行排序