我可以在Ember js模型上指定商店吗?

dav*_*com 9 ember.js

我试图在Ember中使用多个商店,因为我在api端有命名空间模型.

阿卡

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

App.Company = DS.Model.extend //Routes to /companies
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是定义命名空间

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})
Run Code Online (Sandbox Code Playgroud)

问题是模型自动绑定到App.Store.

关于如何完成命名空间模型的任何其他建议都会有所帮助.我甚至不需要在客户端js端命名它们,只要有一种简单的方法来为每个单独的模型指定命名空间

Yeh*_*atz 23

您永远不应该在Ember应用程序中拥有多个商店.

相反,您可以为特定类型注册适配器:

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

您可能希望将此RESTAdapter作为起点,除非您有特定的需求并且愿意使用(仍在不断发展的)适配器API.


Tro*_*len 5

在较新版本的ember中(我运行1.5.0-beta.1 + canary.13995621,而1.4似乎也缺少registerAdapter方法)api已经改变了一点,registerAdapter方法消失了.

现在,如果您想要一个模型的非默认adpter,您可以定义一个App.<ModelName>Adapter,并将自动用于该模型.

因此,如果你有一个Post模型,并且你想为该模型定义名称空间,我认为这将是:

App.PostAdapter = DS.RESTAdapter.extend({
  namespace: 'gl'
})
Run Code Online (Sandbox Code Playgroud)