2013-03-09 37 views
4

我有一個相當複雜的Ember.js對象,我想用頁面加載時的初始HTML/javascript發送(避免單獨到服務器),但然後允許用戶修改它。在Ember中預加載數據:Fixture vs REST適配器

所以我知道如何設置直接存在的FIXTURE數據,並且我知道如何設置RESTAdapter以便我可以加載/保存到服務器......我可以同時做這兩件事嗎?

似乎就像商店設置一次,一個或另一個。對於一個數據源,我可以擁有多個商店嗎?

謝謝!

+0

Ember數據支持側載數據:http://emberjs.com/guides/models/the-rest-adapter/#toc_sideloaded-relationships,但我不確定您是否可以預先加載使用初始化加載的JSON模型頁... – CraigTeegarden 2013-03-09 20:19:45

回答

3

無論您使用哪種適配器,您都可以直接將數據直接加載到商店中。例如,

App.Store = DS.Store.extend({ 
    init: function() { 
     this._super(); 
     this.load(App.Post, { 
      id: 1, 
      text: 'Initial post.' 
     }); 
    } 
}); 

App.Post = DS.Model.extend({ 
    text: DS.attr('string') 
}); 

對於一個完整的示例,請參見this jsfiddle

+0

非常好,謝謝! – 2013-03-10 22:23:50

4

如果你想從你的應用程序代碼之外加載數據,你可以做如下所示:

添加預載功能,以您的文檔(以下所有app.js和store.js) :

<script> 
    window.preload = function(store) { 
     store.loadMany(App.Post,[10,11],[{ id: 10, content: "testcontent", author_id: 1 },{ id: 11, content: "testcontent2", author_id: 1 }]); 
     store.load(App.User,{ id: 1, username: "supervisor"}); 
    } 
</script> 

在你ApplicationRoute你打電話與商店作爲參數的預載功能。

App.ApplicationRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
     window.preload(this.store); 
    } 
}); 

這樣可以減少應用程序初始化時發出的請求數量。

+0

謝謝!這看起來非常有用。 – 2013-04-04 18:20:17

+0

定義的商店變量在哪裏? – 2015-09-24 11:07:22

+0

@suraj它在這個範圍內可用,我在示例中對其進行了修正。 – 2015-09-24 11:50:24

相關問題