2013-03-04 38 views
7

所以我有子资源(我认为是)一个普遍的问题瓦特/灰烬数据。我想知道如何正确定制适配器以适应以下情况。与emberjs +烬数据

假装我有两个目标:通过GET荷兰国际集团api.com/postsPostTag

调用App.Post.find()回报所有的职位,App.Post.find(1)api.com/posts/1发现。这很好。

App.Tag.find()将返回所有可用的api.com/tags标签。 App.Tag.find(1)将以正确的URL返回适当的标签。也不错。

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

PostTags嵌入,因为它们是 “ON” 这一职务。

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

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

所以我的问题来自于添加TagPost。我想PUTPOST标签对象api.com/posts/1/tags其中服务器将完成所有服务器端的东西。

目前,

  1. 烬数据,与{embedded: 'always'}配置集合,将发送到PUTapi.com/posts/1与整个Post物体(与包括新Tag对象),为JSON字符串化字符串。

  2. 没有{embedded: 'always'}配置设置,烬数据将尝试PUT标签对象api.com/tags,将在Tag对象发送一个post_id参数,以便在服务器端可以做所有的服务器端的东西。

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

有谁知道的与Ember数据处理此问题的方法? 谢谢!

+0

有完全相同的问题,因为我们思索用同样的方式 - 似乎没有多大意义,因为灰烬是基于REST的,不是吗? – andreimpop 2013-03-23 01:49:35

+0

嘿@andreimpop我最终使用嵌入式:“负荷”,我们自己的Ajax提交到服务器,并手动操纵的余烬数据状态机。所有这一切都awefull - 我打算一个重做时,这就变成真:http://emberjs.com/blog/2013/03/22/stabilizing-ember-data.html – 2013-03-25 21:54:38

回答

1

您可能会考虑覆盖RESTAdapter#dirtyRecordsForHasManyChange函数来管理事务期间如何处理标记。

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

+0

谢谢...我不知道我尽管理解混乱的部分。我有嵌入关系......他们在负载上完美工作。我只想将标签添加到Post中github为问题添加标签的方式。请参阅:http://developer.github.com/v3/issues/labels/#add-labels-to-an-issue – 2013-03-04 17:36:43

+0

对不起。现在我明白了。你会想重写一些JSONSerializer#addHasMany,甚至可能是JSONSerializer#addBelongsTo。但是,既然你这样做了,就会导致对哪个模型脏(被提交)的混淆。你可能最终会深入挖掘并可能创建自己的适配器。 – clintjhill 2013-03-04 23:06:14

+0

嘿@clintjhill,不要对不起!我非常感谢你的帮助!再次感谢您澄清一些光 – 2013-03-05 01:50:01