7

所以我遇到了(我认为是)一个关于 Ember 数据的一般问题。我想知道如何正确自定义适配器以适应以下情况。

假装我有两个对象:PostTag

调用通过ingApp.Post.find()返回所有帖子,位于。这很好。GETapi.com/postsApp.Post.find(1)api.com/posts/1

App.Tag.find()将返回所有可用的标签api.com/tagsApp.Tag.find(1)将在正确的 url 返回适当的标签。也很好。

App.Post.createRecord({...})如果我通过它将创建新帖子POST到正确的网址。创建Tags. 到目前为止,一切都是花花公子。

Tagson aPost是嵌入的,因为它们在那个帖子上。

App.Adapter.map("App.Post", {
    tags: {embedded: 'always'}
});

在加载期间,Ember-data 一切正常,我仍然非常高兴。

所以我的问题来自将 a 添加Tag到 a Post。我想PUTPOST标签对象到api.com/posts/1/tags服务器将在其中执行所有服务器端的事情。

目前,

  1. 带有配置集的 Ember-data{embedded: 'always'}会将整个对象(包括新对象)作为 JSON 字符串化字符串发送PUT到。api.com/posts/1PostTag

  2. 如果没有{embedded: 'always'}配置集,ember-data 将尝试PUT标记对象api.com/tags并发送Tag带有post_id参数的对象,以便服务器端可以做所有服务器端的事情。

我宁愿不做 1 因为我的服务器不是这样设置的。我宁愿不做 2 因为PUT/POST/GETs onapi.com/tags真的应该是我的应用程序的“标签管理”部分,而不是真正将标签应用于帖子。这种行为的另一个例子是在Github v3 API for Labels & Issues中。

有谁知道用 ember-data 处理这个问题的方法?谢谢!

4

1 回答 1

1

您可以考虑覆盖 RESTAdapter#dirtyRecordsForHasManyChange 函数来管理在事务期间如何处理标签。

但是您没有嵌入关系有点令人困惑,但是您不想在发布模型关系更改期间对标签执行 PUT。我不确定我是否看到了开箱即用适配器行为的问题。

于 2013-03-04T16:40:26.997 回答