【发布时间】:2014-06-03 17:10:44
【问题描述】:
我通过我创建的 API 成功实现了加载和显示与“Backbone Relational”的关系。我通过反复试验了解事情的运作方式。我确实认为文档缺乏一些清晰度,因为花了很多时间来弄清楚事情是如何工作的。尤其是在如何将事物映射到 API 方面,我认为文档有些欠缺。
问题
添加书签有效,编辑和删除无效。 PUT 变成了 POST,而 DELETE 根本不会触发。当我将id 设置为硬编码的模型时,它确实有效。所以 id 丢失了,这对于 PUT 成为 POST 是有意义的。
问题似乎是id 没有实际的id,而是一个集合。出现问题的视图不需要 BookmarkBinding,它在其他地方使用。简单地说,它具有 Bookmark 作为关系这一事实使 DELETE 和 PUT 中断。
书签绑定模型:
App.Model.BookmarkBinding = Backbone.RelationalModel.extend({
defaults: {
set_id: null,
bookmark_id: null
},
relations: [{
type: Backbone.HasOne,
key: 'bookmark',
relatedModel: 'App.Model.Bookmark',
reverseRelation: {
type: Backbone.HasOne,
key: 'id'
}
}],
urlRoot: 'http://api.testapi.com/api/v1/bookmark-bindings'
});
书签模型:
App.Model.Bookmark = Backbone.RelationalModel.extend({
defaults: {
url: 'undefined',
description: 'undefined',
visits: 0,
},
relations: [{
type: Backbone.HasMany,
key: 'termbindings',
relatedModel: 'App.Model.TermBinding',
reverseRelation: {
key: 'bookmark_id',
}
}],
urlRoot: 'http://api.testapi.com/api/v1/bookmarks'
});
【问题讨论】:
-
为什么你认为这与 BBR 具体有关?它不会覆盖
save或destroy- 在 Backbone 中唯一检查以确定发出了什么(如果有,在destroy的情况下)HTTP 请求是model.isNew,它仅检查是否有模型有一个id集。一些可运行的代码(如 jsfiddle)可能会有很大帮助。 -
顺便说一下,如果您对文档改进有任何建议,请在 github 上告诉我们——人们正在使用带有各种 API 的 BBR,以及实际服务的示例(展示如何使用 keySource/我认为 keyDestination 等)可能会很有帮助。
-
嗨,保罗,感谢 (bedankt) 的评论。这不是对您的图书馆的批评。问题是我现在使用 BackboneJS 有一段时间了,了解了这些概念,我正在制作一个有很多关系的应用程序,这让我来到了你的图书馆。由于我在 Eloquent ORM 中使用关系的经验,起初 BBR 很难掌握。 BBR 创建它与键和外键的关系的方式对我来说是模糊的,但我怪我自己,而不是你的图书馆。我走了很长一段路,直到我遇到了必须使用唯一键、sourceKey 和destinationKey 的事实。当我有时间时,我会设置一个小提琴!
-
笨蛋!没有将其视为批评,只是想知道这是否不是“常规”主干问题(这将使修复变得更简单)。如果您对改进某些主题的语法或文档有任何建议,请告诉我。我已经习惯了,以至于我不再注意到其中的特质了...
标签: javascript api backbone.js backbone-relational