Ember-данные получают "attTo" attr (id) из модели без разрешения фактического объекта

Я хочу получить атрибут модели (id) "assignTo" без принудительного вызова сервера или разрешения объекта. Я получил членство с пользователем. Большинство пользователей загружены, и поэтому я хочу сделать серверный вызов только для некоторых пользователей. Недавно я обновил ember-data 1.13.4, и моя старая версия больше не работает.

Членство:

user: DS.belongsTo('user', { async: false }),

До сих пор я делал это, чтобы проверить, был ли пользователь уже в магазине:

if (this.store.peekRecord('user', parseInt(membership._internalModel._data.user)) === null)
      return false;

Но с новым обновлением Ember-Data _data больше не включает в себя принадлежащие идентификаторы.

Заканчивается на этом прогрессом:

Error while processing route: workgroups Assertion Failed: You looked up the 'user' relationship on a 'membership' with id 21 but some of the associated records were not loaded.

Я действительно очень ценю любую помощь в этом.

Спасибо

1 ответ

Решение

Нашел это. На основании этого ответа:

ember-data: Как определить, загружено ли отношение модели async: true без запуска загрузки?

Я смог выяснить это для ember-data 1.13.4 Решение:

membership._internalModel._relationships.initializedRelationships.user.canonicalState.id

Это безобразно Есть идеи получше?

РЕДАКТИРОВАТЬ: Это может быть использовано для расширения DS.Model с помощью функции:

import DS from 'ember-data';

export default {
  name: 'model-getid',
  initialize: function() {
    DS.Model.reopen({
      getId: function(key) {
        // TODO(sn): support hasMany as well
        const rel = this._internalModel._relationships.initializedRelationships;
        return rel && rel[key] && rel[key].canonicalState && rel[key].canonicalState.id;
      }
    });
  }
};

теперь это возможно для нас на одном отношении:

membership.getId('organisation')
Другие вопросы по тегам