Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Ember.js中使用需要将对象注入其他对象_Javascript_Ember.js_Dependency Injection - Fatal编程技术网

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');
  });
}
});