У меня есть следующая модель (упрощенная для этого вопроса):
App.Manager = DS.Model.extend({
name: DS.attr('string'),
teamMembers: DS.hasMany('App.Employee')
});
Когда эта модель загружается (скажем, с App.Manager.find(1)
), она возвращается с моего сервера с массивом teamMembers:
[10, 11, 12]
Моему представлению нужны данные от этих членов команды, поэтому Ember автоматически загружает их с запросом findMany()
, как и ожидалось. Проблема, с которой я сталкиваюсь, заключается в том, что сотрудника № 11 не существует. Сервер отвечает на запрос findMany()
только сотрудниками 10 и 12:
{
"employees": [
{
"id": 10,
"name": "John Doe"
},
{
"id": 12,
"name": "Jane Doe"
}
}
Но Ember-Data, кажется, по-прежнему держит пустое (и выполненное) обещание для Сотрудника 11, даже несмотря на то, что данные для этого сотрудника так и не были возвращены. Итак, теперь, когда мое представление отображается, я получаю таблицу с 3 строками (по одной для каждого сотрудника), и одна из этих строк полностью пуста (поскольку запись пуста).
Проверяем состояние записи:
{
isLoaded: true,
isDirty: false,
isSaving: false,
isDeleted: false,
isError: false,
isNew: false,
isValid: true
}
Итак, я не уверен, как сохранить эту пустую запись вне поля зрения, не проверяя, является ли каждое свойство, которое мне нужно, пустым. Есть ли способ ответить серверу, который скажет Ember не выполнять это обещание? Есть ли способ настроить ember для распознавания, когда данные не возвращаются?
Изменить: я понимаю, что в идеале сервер не должен возвращать идентификатор несуществующего сотрудника. Но реальность такова, что иногда данные ненадежны или плохо поддерживаются. Если бы сотрудник 11 возвращался с неточными данными, я бы согласился, что проблема в данных и/или сервисе, а не в Ember. Однако в данном случае сотрудник 11 не возвращает неверные данные, а возвращает НЕТ данных вообще. В этом случае мне кажется, что ember должен, как минимум, установить флаг (т.е. isValid: false), указывающий, что запись пуста/недействительна/не найдена, а то и вовсе уничтожить ссылку на пустую запись.
Изменить 2: вот проблема на Github
[10, 11, 12]
, когда 11 не существует? Конечно, ваш бэкэнд не должен включать 11, если на бэкэнде не происходит какое-то кэширование. - person Wildhoney   schedule 21.02.2013