所以我(我认为)是Ember-data的一般问题。我想知道如何正确定制适配器以适应以下情况。
假装我有两个对象:Post
和Tag
致电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
。我希望POST
或api.com/posts/1/tags
标记对象为{embedded: 'always'}
,服务器将执行所有服务器端事务。
目前,
设置PUT
配置的Ember数据会向api.com/posts/1
Post
发送整个Tag
对象(使用新{embedded: 'always'}
} object object)作为JSON字符串化字符串。
如果没有PUT
配置集,ember-data将尝试api.com/tags
标记对象Tag
,并使用{post_id
对象发送{1}}参数,以便服务器端可以完成所有服务器端的事情。
我宁愿不做1,因为我的服务器没有这样设置。我宁愿不做2,因为PUT/POST/GET
上的api.com/tags
应该真正用于我的应用程序的“标签管理”部分,而不是真正将标签应用于帖子。此行为的另一个示例是Github v3 API for Labels & Issues。
有没有人知道用ember-data处理这个问题的方法? 谢谢!
答案 0 :(得分:1)
您可以考虑重写RESTAdapter#dirtyRecordsForHasManyChange函数来管理在事务处理期间如何处理标记。
但是,如果您没有嵌入式关系,则有点令人困惑,但是您不希望在Post模型关系更改期间对Tags执行PUT。我不确定我是否看到了开箱即用的适配器行为的问题。