具有emberjs + ember-data的子资源

时间:2013-03-04 02:40:36

标签: ember.js ember-data

所以我(我认为)是Ember-data的一般问题。我想知道如何正确定制适配器以适应以下情况。

假装我有两个对象:PostTag

致电App.Post.find()返回GET api.com/posts App.Post.find(1)后的所有帖子,api.com/posts/1位于App.Tag.find()。这很好。

api.com/tags将返回App.Tag.find(1)处可用的所有代码。 App.Post.createRecord({...})会在正确的网址上返回相应的标记。也很好。

如果我通过POST创建新帖子,它会Tags到正确的网址。创建Tags也是如此。到目前为止,一切都很花哨。

嵌入了Post上的{p> App.Adapter.map("App.Post", { tags: {embedded: 'always'} }); 因为它们在该帖子上“开启”。

Tag

在加载过程中,Ember-data做的一切正常,我仍然非常高兴。

所以我的问题来自向Post添加PUT。我希望POSTapi.com/posts/1/tags标记对象为{embedded: 'always'},服务器将执行所有服务器端事务。

目前,

  1. 设置PUT配置的Ember数据会向api.com/posts/1 Post发送整个Tag对象(使用新{embedded: 'always'} } object object)作为JSON字符串化字符串。

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以考虑重写RESTAdapter#dirtyRecordsForHasManyChange函数来管理在事务处理期间如何处理标记。

但是,如果您没有嵌入式关系,则有点令人困惑,但是您不希望在Post模型关系更改期间对Tags执行PUT。我不确定我是否看到了开箱即用的适配器行为的问题。