Javascript 在Ember.js中使用需要将对象注入其他对象
我想了解Javascript 在Ember.js中使用需要将对象注入其他对象,javascript,ember.js,dependency-injection,Javascript,Ember.js,Dependency Injection,我想了解needs属性是否可以用于将任意对象注入控制器、路由和视图 我正在开发一个Ember.js应用程序,其中我正在编写一个自定义数据服务层,该层与后端通信以加载和持久化数据。我定义了代表各种后端服务的Ember对象,例如: App.SessionServiceClient = Em.Object.extend({ // methods and attributes }); App.UserServiceClient = Em.Object.extend({ // methods a
needs
属性是否可以用于将任意对象注入控制器、路由和视图
我正在开发一个Ember.js应用程序,其中我正在编写一个自定义数据服务层,该层与后端通信以加载和持久化数据。我定义了代表各种后端服务的Ember对象,例如:
App.SessionServiceClient = Em.Object.extend({
// methods and attributes
});
App.UserServiceClient = Em.Object.extend({
// methods and attributes
});
我现在将这些对象注册到应用程序的容器中,以使它们可用于DI:
App.register('service:session', App.SessionServiceClient, {singleton: false});
App.register('service:user', App.UserServiceClient, {singleton: false});
现在,对象可用于注入,如果我有一个只需要SessionServiceClient的控制器,我可以执行以下操作:
App.SignInController = Em.ObjectController.extend({
needs: ['service:user'], // using the needs to declare dependency
actions: {
// actions for the view
}
});
当我尝试这个时,它不起作用。Ember.js是否可能这样做,还是我做得不对?最佳做法是使用初始值设定项将您的服务注入到您需要的控制器中。看
此外,您还应该尝试切换到Ember CLI,或者至少使用ES6模块结构。(即使用导入而不是全局。)那么,你是说在Ember.js中没有办法使用
需要
属性来实现这一点吗?是的,没有办法使用需要
来实现这一点<代码>需要只是将控制器注入其他控制器。感谢@tikotzky的澄清。如果needs
是进行注射的一种方式,那就太好了。我将接受@gordonc的回答。核心团队现在不鼓励在任何用例中使用需求
,因为控制器很可能在Ember 2.0中被淘汰,并被可路由组件取代。
Ember.Application.initializer({
name: "sessionLoader",
after: "store",
initialize: function(container, application) {
container.register('service:session', App.SessionServiceClient, {singleton: false});
container.injection('route', 'session', 'service:session');
container.injection('controller', 'session', 'service:session');
});
}
});