Ember.js project - TypeError: session is undefined

Ember.js project - TypeError: session is undefined

我正在尝试 运行 一个 Ember 项目,我不得不升级它的包,但现在我 运行 遇到了弃用问题。

我目前的问题是,当我在 firefox 中打开开发人员控制台时,当我按下 'login' 时,我看到一条 TypeError: session is undefined 消息。

我真的不了解 Ember,所以据我所知,有一个构建 javascript 文件是基于 javascript 小文件的 MCR 架构。

所以这是最重要的部分:

define('genesis/controllers/login', ['exports', 'ember'], function (exports, _ember) {
  exports['default'] = _ember['default'].Controller.extend({
    loginMessage: "",
    actions: {
      authenticate: function authenticate() {
        var credentials = this.getProperties('identification', 'password'),
            authenticator = 'simple-auth-authenticator:jwt';
        this.set("loginMessage", "");
        var session = this.get('session');
        session.authenticate(authenticator, credentials);
      }
    }
  });
});

这是它基于的小版本:

templates/login.js

import Ember from 'ember';


export default Ember.Controller.extend({
  loginMessage: "",
  actions: {
    authenticate: function() {
      var credentials = this.getProperties('identification', 'password'),
        authenticator = 'simple-auth-authenticator:jwt';
      this.set("loginMessage", "");
      var session = this.get('session');
      session.authenticate(authenticator, credentials);
    }
  }
});

由于弃用,我不得不将 Ember.ObjectController.extend 更改为 Ember.Controller.extend

假设session是一个服务,你需要将它注入控制器才能使用它。如果不注入,this.get('session') 将 return 未定义。

检查 this documentation 有关依赖项注入的更多详细信息。

原来在升级过程中我从 package.json 中删除了一个名为 ember-simple-auth-token,但由于 Charizard 的回答,我要感谢他让我找到它。

我还必须对模板文件进行一些微小的更改。

templates/login.js:

import Ember from 'ember';

export default Ember.Controller.extend({
  session: Ember.inject.service(),
  loginMessage: "",
  actions: {
    authenticate: function() {
      var credentials = this.getProperties('identification', 'password'),
        authenticator = 'authenticator:jwt';
      this.set("loginMessage", "");
      this.get('session').authenticate(authenticator, credentials);
    }
  }
});