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

时间:2013-01-14 15:46:14

标签: ember.js

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

3 个答案:

答案 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文件中来创建特定于模型的适配器。

来源:DS.Adapter Class