javascript - 在 Ember.js 中使用需要将对象注入(inject)到其他对象中

标签 javascript ember.js dependency-injection

我想了解 needs 属性是否可用于将任意对象注入(inject) Controller 、路由和 View 中。

我正在开发一个 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});

现在对象可用于注入(inject),如果我有一个仅需要 SessionServiceClient 的 Controller ,我可以执行以下操作:

App.SignInController = Em.ObjectController.extend({
  needs: ['service:user'],                  // using the needs to declare dependency
  actions: {
    // actions for the view
  }
});

当我尝试这个时,它不起作用。 Ember.js 可以做到这一点还是我做错了?

最佳答案

最佳实践是使用初始化程序将您的服务注入(inject)到您需要它的 Controller 中。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 模块结构。 (即使用导入而不是全局变量。)

关于javascript - 在 Ember.js 中使用需要将对象注入(inject)到其他对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27199132/

相关文章:

javascript - 将 Angular 应用程序与 Vanilla JS webapp 集成

javascript - Ember.js 路由器,从 View 获取路由器

c# - 解析标记范围和未标记范围中的组件

c# - Asp.net Core 中的条件依赖解析

javascript - 如何以方程的形式产生两个值的输出而不仅仅是输出?

javascript - JavaScript 程序中的错误

ember.js - 如何从 ember eventManager 访问父 View 和 Controller

javascript - Ember.js:在执行验收测试时消失组件属性

Java:检测服务中注入(inject)过多依赖项

javascript - 在不加载完整文件的情况下跳到 HTML5 音频元素中的特定时间