2012-07-18 5 views
1

J'ai un service qui récupère les URL et qui doit être créé comme un singleton avec une configuration spécifique à l'application.Ember - Comment partager des singletons entre contrôleurs

Plusieurs de mes contrôleurs doivent utiliser ce service.

Comment puis-je créer ce service en un seul endroit, de préférence dans l'application et le partager entre les contrôleurs afin qu'ils puissent l'utiliser directement?

Mes modules sont divisés en différents fichiers, en utilisant requirejs.

URLService.js

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

SomeController.js

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

Application:

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

est-il construit de façon ou une meilleure pratique de le faire? ou est-ce que je manque quelque chose dans l'architecture?

Répondre

0

Vous pouvez créer une classe de base qui extend la Controller comme vous faites déjà, et tous vos contrôleurs d'application extend de lui comme ceci:

// 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(...); 
+0

Merci, ce n'est pas ce que je voulais dire que, je m en utilisant des fichiers séparés via requirejs, ce qui signifie que je n'ai pas la possibilité de fermer le partage de l'URLService configuré comme ça. Je pensais utiliser la gestion des dépendances requirejs pour partager et configurer le service en utilisant le module de configuration spécifique à l'application, mais je voulais savoir s'il y avait une meilleure façon de le faire dans ember. Merci pour votre réponse et vos efforts. –

Questions connexes