Ember - 如何在路线行动中获得路线模型

时间:2016-02-25 14:58:58

标签: ember.js ember-data

是否可以在路线行动中访问路线模型?

我将路径模型中的多个对象传递给模板,

 model: function() {
    return {
        employeeList : this.store.findAll("employee"),
        employee : Ember.Object.create()
    }
}

从路线动作我想修改路线model.employee。我尝试了以下内容,但我没有得到该对象。

actions:{
    editAction : function(id) {
        var emp = this.get("model");
        console.log(emp.employee);

    }
}

任何人都可以提供获取和修改模型对象(员工)的解决方案吗?

2 个答案:

答案 0 :(得分:31)

第一个问题是你应该从模型钩子返回一个promise。这样,过渡将等待Resolve的承诺。 return { /*...*/};返回一个对象而不是一个promise,即使该对象本身包含promise。 解决方案是使用Ember.RSVP.hash之类的:

model() {
  return Ember.RSVP.hash({
    employeeList: this.store.findAll('employee'),
    employee: Ember.Object.create()
  });
}

这将返回一个承诺,当所有内部承诺解决后,该承诺将解决。

第二个问题是你不能在路线中使用this.get('model')。如果你考虑一下,model属性就是钩子本身而不是已解析的模型。解决方案:

  1. 该操作是从控制器/模板发送的。你不能把模型作为参数传递吗?这样你就可以通过函数参数访问模型。
  2. 如果您确实需要,this.modelFor(this.routeName);将返回当前路线的模型。
  3. 您可以通过控制器访问模型,例如this.controller.get('model')
  4. 您还可以实现setupController挂钩并访问模型。然后,您可以执行this.set('employeeModel', model);之类的操作以供日后访问。

答案 1 :(得分:0)

this.get('context')

允许您在路线操作中访问模型。