我有一個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