我有一个Ember应用程序,其登录表单在成功登录后以JSON格式返回当前用户。用EmberData手动加载模型
使用createRecord
直接在模型上设置返回的JSON属性。例如,is_private
变成user.is_private
,而不是user.get('isPrivate')
?
如何加载用户模型,以便正确设置属性,并且不必使用ID重新获取它?
我有一个Ember应用程序,其登录表单在成功登录后以JSON格式返回当前用户。用EmberData手动加载模型
使用createRecord
直接在模型上设置返回的JSON属性。例如,is_private
变成user.is_private
,而不是user.get('isPrivate')
?
如何加载用户模型,以便正确设置属性,并且不必使用ID重新获取它?
据称,正式的方式来做到这一点是使用adapter.load
,如described in this thread:
加载数据
以前,店里的一些功能,如
load()
,假设 单个适配器。如果要加载从你的后端数据,而不要求它(例如,通过的WebSockets流)的应用 ,使用此 API:
store.adapterForType(App.Person).load(store, App.Person, payload);
这个API还将把手侧载和嵌入的数据。我们计划在未来添加 这个更方便的API版本。
但不幸的是,它不处理sideloaded数据,尽管文档声称。我个人使用类似于以下,这是基于怎样find(ID)
实现:
var id = json["person"]["id"];
var store = DS.get("defaultStore");
var adapter = store.adapterForType(App.Person);
adapter.didFindRecord(store, App.Person, json, id);
var person = App.Person.find(id);
请注意,此代码假定JSON在同一格式find(ID)
希望从服务器接收,因为documented in the RESTAdapter guide:
{
person: {
id: 1,
is_private: false,
projects: [3]
},
projects: [
{ id: 3, name: "FooReader" }
]
}
这将应用您使用keyForAttributeName
配置的任何转换(例如将is_private
映射到isPrivate
),并且它将处理侧载记录。我不确定这是否是最佳做法,但效果很好。
截至前几天在烬数据1.0测试版中,您可以使用pushPayload
将数据直接加载到商店中。例如,如果您通过WebSockets将数据推送到您的应用程序(我们使用Heroku插件Pusher)。您可以直接调用它的存储(source),它会传递通过相应的串行:
var postsJSON = {
posts: [
{id: 1, post_title: "Great post"}
]
}
this.store.pushPayload('post',postsJSON)
请注意,目前不会加载一个单一对象(即post: {id: 1, post_title:"First!"}
) - 你需要把它格式化为具有多个一个数组。
DS.RESTSerializer
具有pushPayload
以及(source),在这种情况下,你需要将它传递店里来代替。
我强烈建议使用前阅读源代码,因为它看起来像它的实施将是rev isited。
我完全认为这会打破某个时间,但至少这是现在的作品。我希望它不会。我不得不把我的json变成一个只有单个对象的数组。 – bfcoder 2013-11-07 02:10:31
这是一年前发布的,今天仍然完美,我猜这是留在这里。 – 2015-12-21 18:30:42
store.push('user', userJSON)
怎么样?
http://emberjs.com/guides/models/pushing-records-into-the-store/#toc_pushing-records
以上所有答案都不适用于我。 只对我有效的是:
this.store.buildRecord(this.store.modelFor('person'), data.id, data)
Thanks!我接近'didFindRecord',但我不确定我完全知道该方法正在发生什么。 – bschaeffer 2013-04-09 17:56:26
嗨。当我填充单个记录时,这个转换效果非常好。我如何填充多个记录?例如:http://pastebin.com/raw.php?i=NNFVDYR0 – Mattia 2013-05-11 14:18:24
据我可以告诉这不再工作在烬数据1.0.0-beta.3我用这个在烬数据0.14但我最终使用了1.0.0-beta.3给出的答案:http://stackoverflow.com/a/18948134/1477165 – bfcoder 2013-11-07 02:11:21