С ember-data-1.0.0-beta.10 Я использую следующее расширение модели.
Просто позвоните model.reloadRelationship(name)
, где name - это имя атрибута модели, представляющего отношение.
Это работает как для нормального, так и для связи принадлежит отношениям/hasMany.
DS.Model.reopen({
reloadRelationship: function(name) {
var meta = this.constructor.metaForProperty(name),
link = this._data.links ? this._data.links[meta.key] : null;
if (!link) {
if (meta.kind === 'belongsTo') {
this.get(name).then(function(model) { model.reload(); });
} else {
this.get(name).invoke('reload');
}
} else {
meta.type = this.constructor.typeForRelationship(name);
if (meta.kind === 'belongsTo') {
this.store.findBelongsTo(this, link, meta);
} else {
this.store.findHasMany(this, link, meta);
}
}
}
});
Единственное, что здесь отсутствует некоторые проверки, например, проверить, если модель уже перегрузки, когда модель перезагружается с помощью ссылки или чеком, чтобы увидеть, если имя свойства существует в текущей модели.
EDIT уголек-данные 1.0.0-beta.14:
DS.Model.reopen({
reloadRelationship: function(key) {
var record = this._relationships[key];
if (record.relationshipMeta.kind === 'belongsTo') {
return this.reloadBelongsTo(key);
} else {
return this.reloadHasMany(key);
}
},
reloadHasMany: function(key) {
var record = this._relationships[key];
return record.reload();
},
reloadBelongsTo: function(key) {
var record = this._relationships[key];
if (record.link) {
return record.fetchLink();
} else {
record = this.store.getById(record.relationshipMeta.type, this._data[key]);
return record.get('isEmpty') ? this.get(key) : record.reload();
}
}
});
HasMany отношение будет Откат к родному методу перезагрузки.
Для отношений BelongsTo он сначала проверяет, нужно ли перезагружать запись (если она еще не загружена до этого момента, она вызовет вызов только для получения записи, иначе она вызовет перезагрузку).
Я думаю, что лучший способ решить эту проблему, чтобы переопределить 'update' метод из' RecordArray', в классе 'ManyArray'. И дайте некоторый контекст, как «ссылки». В настоящий момент использование 'comments.update()' будет извлекать все комментарии, введя только «post/1/comments». Но для этого потребуется какой-то запрос на растяжение. –
Да, в качестве первой попытки я попытался использовать метод обновления;). Я бы хотел услышать @wycats в этом предложении PR. –
Было ли это представлено как PR? – claptimes