this.transitionToRoute在我的控制器Ember中不起作用

时间:2016-08-12 04:09:43

标签: ember.js ember-data

我正在使用控制器读取下拉菜单中选择的值,获取某些输入字段的参数,然后保存记录。它创建记录并接收信息就好了。我的问题在于当我尝试在操作结束时转换到另一个页面时。我一直收到错误:Cannot read property 'transitionToRoute' of undefined

我完全难过了。有什么想法吗?

这是我的控制器代码:

var teamId;
export default Ember.Controller.extend({
    auth: Ember.inject.service(),
    actions: {
        onSelectEntityType: function(value) {
         console.log(value);
         teamId = value;
         return value;
      },
      createProcess: function(processName, processDescription) {
        var currentID = this.get('auth').getCurrentUser();
        let team = this.get('store').peekRecord('team', teamId);
        let user = this.get('store').peekRecord('user', currentID);
        let process = this.get('store').createRecord('process', {
            team: team,
            user: user,
            name: processName,
            description: processDescription
        });
        process.save().then(function () {
        this.transitionToRoute('teams', teamId);
      });
    }

    }
});

以下是相应的路线:

export default Ember.Route.extend({
    auth: Ember.inject.service(),
    model: function() {
        var currentID = this.get('auth').getCurrentUser();
        return this.store.find('user', currentID);
    }
});

1 个答案:

答案 0 :(得分:4)

您应该清楚地了解Javascript中的关键字。关键字this仅取决于调用函数的方式,而不取决于函数的定义方式/时间/位置。

function foo() {
    console.log(this);
}

// normal function call
foo(); // `this` will refer to `window`

// as object method
var obj = {bar: foo};
obj.bar(); // `this` will refer to `obj`

// as constructor function
new foo(); // `this` will refer to an object that inherits from `foo.prototype`

查看MDN documentation了解详情。

您可以在正常变量中缓存 this ,然后在回调中进行访问。

var self = this;

process.save().then(function () {
  self.transitionToRoute('teams', teamId);
});

ECMASCript 6引入了箭头函数,它的作用是词法范围。在这里,就像普通变量一样在范围内查找。

process.save().then(() => {
  this.transitionToRoute('teams', teamId);
});