我想了解该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是否可能这样做,或者我做错了吗?
最佳实践是使用初始化程序将服务注入到需要它的控制器中。SEe http://ember.zone/ember-application-initializers/
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');
});
}
});
另外,您应该真正尝试切换到Ember-CLI或至少使用ES6模块结构。(即使用导入而不是全局变量。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句