9

我正在尝试在 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 端命名空间,只要有一种简单的方法可以为每个单独的模型指定命名空间

4

3 回答 3

23

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

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

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

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

于 2013-01-15T00:45:25.493 回答
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'
})
于 2014-02-21T19:59:23.000 回答
0

已经没有registerAdapter办法了。

对于余烬 2:

可以通过将您的适配器类放在应用程序的 app/adapters/ + 模型名称 + .js 文件中来创建特定于模型的适配器。

来源:DS.Adapter 类

于 2015-09-11T01:18:12.443 回答