Javascript 余烬';s*需要*依赖关系

Javascript 余烬';s*需要*依赖关系,javascript,ember.js,Javascript,Ember.js,我有一个由几个步骤组成的注册过程,希望将状态存储在一个服务中,每个控制器可以为每个步骤访问该服务 我能够让这个工作,但在某种程度上,似乎并不与余烬的做事方式摇摆不定。我没有设置控制器的需要:值,而是添加了一个初始值设定项,其中包含以下内容: export default { name: 'signup-state', initialize: function(container, app) { app.inject('controller:signup/index', 's

我有一个由几个步骤组成的注册过程,希望将状态存储在一个服务中,每个控制器可以为每个步骤访问该服务

我能够让这个工作,但在某种程度上,似乎并不与余烬的做事方式摇摆不定。我没有设置控制器的
需要:
值,而是添加了一个初始值设定项,其中包含以下内容:

export default {
  name: 'signup-state',
  initialize: function(container, app) {

    app.inject('controller:signup/index',   'signup-state', 'service:signup-state');
    app.inject('controller:signup/method',  'signup-state', 'service:signup-state');

    app.inject('route:signup/method', 'signup-state', 'service:signup-state');
  }
};
上述内容基于wycats在讨论委员会上的评论[1]

这样做似乎是错误的。我想,
需要
控制器会处理这个问题。因此,如果这是完全错误的,请停止我在这里,因为这样做更好的方式可以解决问题

除了测试控制器时,上述方法都有效。当我在控制器上调用一个方法,该方法调用服务上的一个方法时,我得到一个错误

这是控制器代码

export default Ember.Controller.extend({

  /**
   * Reference to the signup-state service => initializers/signup-state.js
   */
  setState: function(key, val) {
    var state = this.get('signup-state');
    state.set(key, val);   <== state is undefined in tests
  },

  actions: {
    signupAsAdmin: function() {
      this.setState('userType', 'admin');
      this.transitionToRoute('signup.method');
    }
  }

});
在控制器内调用signupAsAdmin函数会导致对服务对象进行set调用,从而导致“未定义”错误

初始值设定项代码通过添加console.log语句来运行,但似乎不会导致在测试期间使服务对控制器可用

感谢您的帮助

注意:我正在使用ember cli,因此没有可用的全局应用程序变量

更新手动注册(我认为ember cli正在做的事情)确实有效

export default {
  name: 'signup-state',
  initialize: function(container, app) {

    app.register('service:signup-state', 'signup-state');

    // Remove Injects
    // app.inject('controller:signup/index',   'signup-state', 'service:signup-state');
    // app.inject('controller:signup/method',  'signup-state', 'service:signup-state');
  }
};
上述结果导致在控制器中调用
get('signup-state')
时返回空值


  • 我对为服务使用依赖项注入的想法不太熟悉,所以我可能遗漏了一些东西,但在ember代码库中看到这一点让我想,您是否只是遗漏了一个
    app.register('service:signup state',app.ModelForSignupState)
    来为其提供骨骼?

    您之前注册过服务吗,所以它可以作为依赖注入的工厂吗?我使用的是ember cli,所以我觉得注册是为我做的。我这么想是不是错了?你是不是有一个角色和所有的玩具在流血边缘我不知道它有什么魔力,但可能值得一试。如果你找到一个告诉你如何旋转该部件的文档,请务必为我们发布。这可能不是开始学习Ember的最佳方式,但决定是:)
    export default {
      name: 'signup-state',
      initialize: function(container, app) {
    
        app.register('service:signup-state', 'signup-state');
    
        // Remove Injects
        // app.inject('controller:signup/index',   'signup-state', 'service:signup-state');
        // app.inject('controller:signup/method',  'signup-state', 'service:signup-state');
      }
    };