2013-01-14 23 views
9

我想在Ember中使用多個商店,因爲我在api一側有名稱空間模型。我可以指定Ember js模型上的商店嗎?

阿卡

App.Gl.Account = DS.Model.extend //Needs to route to /gl/accounts 

App.Company = DS.Model.extend //Routes to /companies 

我首先想到的是定義一個名字空間

App.Gl = Ember.Namespace.create({}); 
//and a store 
App.Gl.Store = DS.Store.extend({adapter:DS.RESTAdapter({namespace:'gl'})}); 
App.Store = DS.Store.extend({adapter:DS.RESTAdapter}) 

問題是模型自動綁定到App.Store。

關於如何完成命名空間模型的任何其他建議將會有所幫助。我甚至不需要它們在客戶端js上的名稱空間,只要有一種簡單的方法來爲每個單獨的模型指定名稱空間

+0

我還在旋轉,當談到正確使用燼數據,但按[修訂11](https://github.com/emberjs/data/blob/master /BREAKING_CHANGES.md#loading-data),我認爲你應該有多個適配器作爲多個商店的選擇。 – MilkyWayJoe

回答

23

在Ember應用程序中永遠不應該有多個存儲。

相反,你可以爲特定類型的註冊適配器:

App.Store.registerAdapter('App.Post', DS.RESTAdapter.extend({ 
    // implement adapter; in this case 
    url: "/gl" 
})); 

你可能會想使用RESTAdapter爲出發點,除非你有特殊需求,並願意下來和骯髒與(仍在不斷髮展)的適配器API。

+0

謝謝耶胡達,不知道這個存在,我可能會提交一個拉來添加這個指南。我採用擴展RESTAdapter的路線來支持命名空間模型。即App.Gl.Account將路由到'/ gl/accounts' – davydotcom

+0

另一種方法是在特定的適配器中使用url:「/ gi」。我會更新我的答案,以更清楚地說明這一點。 –

+0

期待您的答案更新,耶胡達卡茨。 –

5

在新版本的燼(我正在運行1.5.0-beta.1 + canary.13995621,1.4也似乎缺乏registerAdapter方法)的api已經改變了一點,registerAdapter方法已經消失。

現在,如果您希望爲模型設置非默認adpter,您可以定義App.<ModelName>Adapter,並且該模型將自動用於該模型。

所以,如果你有一個Post模型,你想定義該模型的命名空間,我認爲這將是:

App.PostAdapter = DS.RESTAdapter.extend({ 
    namespace: 'gl' 
}) 
0

現在,已經沒有一個registerAdapter方法。

爲灰燼2:

特定型號的適配器可以把你的適配器類的應用程序/適配器/ +模型名+ .js文件的應用程序的創建。

來源:DS.Adapter Class

相關問題