我想了解needs
属性是否可用于将任意对象注入控制器,路由和视图。
我正在开发一个Ember.js应用程序,我正在编写一个自定义数据服务层,它与后端通信以加载和保存数据。我定义了Ember Objects,它代表了各种后端服务,例如:
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或我做错了吗?
答案 0 :(得分:1)
最佳做法是使用初始化程序将您的服务注入您需要的控制器中。见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模块结构。 (即使用导入而不是全局变量。)