Ember - 如何在控制器之间共享单例

时间:2012-07-18 18:59:38

标签: ember.js

我有一个获取网址的服务,需要创建一个具有应用程序特定配置的单例。

我的一些控制器需要使用此服务。

如何在一个地方创建此服务,最好是在应用程序中并在控制器之间共享,以便他们可以直接使用它?

我的模块使用requirejs分为不同的文件。

URLService.js

var urlService = URLService.create({config: {...} })

SomeController.js

var SomeController = Em.Controller.extend({ 
  service: null
})

应用:

App = Em.Application.create({
  SomeController: SomeController  <-- inject the urlService into SomeController.service
})

是否有内置方式或最佳做法?或者我在架构中遗漏了什么?

1 个答案:

答案 0 :(得分:0)

您可以创建一个extend Controller基类,就像您已经在做的那样,所有应用程序控制器extend都可以这样做:

// the service
var urlService = URLService.create({config: {...} })

// the base controller class
var BaseController = Em.Controller.extend({ 
    service: null,
    init: function() {
        this._super();
        this.set('service', urlService);
    }
});

// your controllers inheriting from your base controller already with the service instance
var SomeController1 = BaseController.extend(...);
var SomeController2 = BaseController.extend(...);