Ember - Как получить модель маршрута внутри маршрута

Можно ли получить доступ к модели маршрута внутри действия маршрута?

Я передаю несколько объектов внутри модели маршрута в шаблон,

 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);

    }
}

Может ли кто-нибудь дать решение для получения и изменения объекта модели (сотрудника)?

Ответ 1

Первая проблема заключается в том, что вы должны вернуть обещание с помощью крючка модели. Таким образом, переход будет ждать обещания разрешить. return { /*...*/}; возвращает объект, а не обещание, даже если сам объект содержит promises. Решение состоит в том, чтобы использовать Ember.RSVP.hash как:

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

Это вернет обещание , которое разрешает, когда разрешается выполнение всех внутренних promises.


Вторая проблема заключается в том, что вы не можете использовать this.get('model') в маршруте. Если вы думаете об этом, то свойство model - это сам крючок, а не разрешенная модель. Решения:

  • Это действие отправляется с контроллера/шаблона. Не можете ли вы передать модель в качестве параметра? Таким образом, вы можете получить доступ к модели через аргументы функции.
  • Если вам абсолютно необходимо, this.modelFor(this.routeName); возвращает модель для текущего маршрута.
  • Вы можете получить доступ к модели по маршруту через контроллер, например this.controller.get('model').
  • Вы также можете реализовать setupController и получить доступ к этой модели. Затем вы можете сделать что-то вроде this.set('employeeModel', model); для более позднего доступа.