我正在尝试在Ember中使用多个商店,因为我在api端有命名空间模型。
阿卡
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 :(得分:23)
您不应该在Ember应用程序中拥有多个商店。
相反,您可以为特定类型注册适配器:
App.Store.registerAdapter('App.Post', DS.RESTAdapter.extend({
// implement adapter; in this case
url: "/gl"
}));
您可能希望使用RESTAdapter
作为起点,除非您有特定的需求并且愿意使用(仍在不断发展的)适配器API变得肮脏。
答案 1 :(得分:5)
在较新版本的ember中(我运行的是1.5.0-beta.1 + canary.13995621,1.4似乎也缺少registerAdapter方法)api已经改变了一点,registerAdapter方法已经消失。
现在,如果您想要一个模型的非默认参数,您可以定义一个App.<ModelName>Adapter
,它将自动用于该模型。
因此,如果您有一个Post模型,并且您想为该模型定义命名空间,我认为这将是:
App.PostAdapter = DS.RESTAdapter.extend({
namespace: 'gl'
})
答案 2 :(得分:0)
不再有registerAdapter
方法。
对于Ember 2:
可以通过将适配器类放在应用程序的app / adapters / + model-name + .js文件中来创建特定于模型的适配器。