Определить, был ли создан элемент hasMany -> ownTo в Ember.js

Я использую Ember: 1.3.0-beta.2 и Ember Data: 1.0.0-beta.2.

Вот моя установка:

Модели

Rise.User = DS.Model.extend({
  //....
  user_training_plans: DS.hasMany('training_plan', { async: true }),
  user_training_histories: DS.hasMany('training_history', { async: true }),
});

Rise.TrainingHistory = DS.Model.extend({
  //....
  user: DS.belongsTo('user', { async: true }),
  training_resource: DS.belongsTo('training_resource', { async: true })
});

Rise.TrainingPlan = DS.Model.extend({
  //....
  user: DS.belongsTo('user', { async: true }),
  training_resource: DS.belongsTo('training_resource', { async: true })
});

В действии контроллера я пытаюсь переместить тренировочный ресурс из плана обучения пользователя в истории тренировок. Я хотел бы определить, был ли учебный ресурс уже добавлен в истории тренировок, прежде чем добавлять его.

Я хотел бы сделать что-то подобное, что в настоящее время находится в планах обучения.

markCompleted: function(trainingPlanItem) {
  completed_training_resource_id = trainingPlanItem.get('training_resource.id');

  this.controller.get('user_training_histories').then( function(user_training_histories) {
    var already_exists = user_training_histories.any( function(item) {
      var item_id = item.get('training_resource').get('id');
      if (item_id == completed_training_resource_id) {
        return true;
      }
    });

    // ...continues
  });
}

Конечно, item.get('training_resource').get('id'); возвращает промис, если данные не были получены, поэтому эта строка сравнения if (item_id == completed_training_resource_id) работает некорректно.

Есть ли способ запустить any и использовать промис внутри? Или есть способ увидеть training_resource_id без загрузки учебного ресурса? Это отношение belongs_to, поэтому идентификатор учебного ресурса извлекается с сервера.


person claptimes    schedule 13.12.2013    source источник
comment
Я думаю, вы должны иметь доступ к training_resource_id в вашей user_training_history, например: item.get('training_resource_id')   -  person fanta    schedule 13.12.2013
comment
К сожалению, это значение равно undefined... Было бы логично, если бы я имел доступ к этому значению, поскольку мой сервер передал соответствующий идентификатор Ember.   -  person claptimes    schedule 13.12.2013
comment
Я еще не использовал эту версию ember-data. Вы пробовали с trainingResourceId ? что, если вы определите это свойство в модели? Возможно, модель нуждается в нем, чтобы отобразить его   -  person fanta    schedule 13.12.2013
comment
Пробовал и так с тем же результатом. Я мог бы определить это свойство в модели и в конечном итоге пойти по этому пути, но я расстроен, потому что Эмбер уже знает, что такое идентификатор этой модели, и сохранил его... где-то.   -  person claptimes    schedule 13.12.2013


Ответы (1)


Получить идентификатор принадлежности без получения записи

Я не уверен, согласен ли я с этим маршрутом, но вы можете взять его с объекта данных.

item.get('data.training_resource.id')
person Kingpin2k    schedule 13.12.2013
comment
В качестве альтернативы item.get('data.training_resource.id'). Если у вас есть лучшие предложения по проверке user_training_histories на наличие дубликатов, дайте мне знать! Возможно, есть лучший подход, чем использование any. - person claptimes; 13.12.2013