gpt4 book ai didi

javascript - 'Backbone Relational' 模型关系添加一个 'id' 和一个集合作为值,防止 PUT 和 DELETE

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:33 26 4
gpt4 key购买 nike

我成功地从我创建的 API 中加载并显示了与“Backbone Relational”的关系。我通过反复试验了解事情的运作方式。我确实认为文档不够清晰,因为花了很多时间来弄清楚事情是如何工作的。尤其是关于如何将事物映射到 API,我认为文档有点欠缺。

问题
添加书签有效,编辑和删除无效。 PUT 变成了 POST,而 DELETE 根本就不会触发。当我将 id 设置为硬编码的模型时,它确实有效。因此缺少 id,这对于 PUT 成为 POST 是有意义的。

问题似乎是 id 没有实际的 id,而是一个集合。出现问题的 View 不需要 BookmarkBinding,它在其他地方使用。仅仅因为它具有 Bookmark 作为关系,所以 DELETE 和 PUT 中断。

书签绑定(bind)模型:

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'
});

最佳答案

来自 Backbonejs.org

The default sync handler maps CRUD to RESTful HTTP methods like so:

create → POST   /collection
read → GET /collection[/id]
update → PUT /collection/id
delete → DELETE /collection/id

您的问题表明您正在发出 HTTP PUT 请求,因此是 Backbone 更新。如果要进行 HTTP POST,请使用 Backbone create。 PUT 请求映射到更新,并要求在 URL 中发送一个 id,根据您的服务器日志,这不会发生。如果您要创建一个新对象,那么大多数服务器端框架(例如 Rails/Sinatra/Zend)都会为该对象创建一个 id

另一个可能的错误来源是您为关系选择的键,就像您怀疑的那样。

一个 Bookmark 有很多 BookmarkBindings,似乎 Backbone-relational 会将它们存储在您在 BookmarkBindings.relations.reverseRelation.key 中指定的字段中,该字段当前定义为“id”。因此,相关 BookmarkBindings id 的集合将存储在与 Bookmark.id 相同的属性上,从而产生冲突。 Backbone.sync 将向服务器发送一个未定义的值(您在日志中看到),因为它在那里找到一个集合而不是一个整数。

第一个建议 - 您可能不需要双向关系,在这种情况下将其从 BookmarkBinding 模型中删除。

第二个建议 - 在另一个键上定义反向关系,这样它就不会与 Bookmark.id 冲突,例如 BookmarkBindings.relations.reversRelation.key : 'binding_ids'

  • 如实披露 - 我从未使用过 Backbone-relational.js,只使用过 Backbone.js。

关于javascript - 'Backbone Relational' 模型关系添加一个 'id' 和一个集合作为值,防止 PUT 和 DELETE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com