Я использую 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
, поэтому идентификатор учебного ресурса извлекается с сервера.
undefined
... Было бы логично, если бы я имел доступ к этому значению, поскольку мой сервер передал соответствующий идентификатор Ember. - person claptimes   schedule 13.12.2013