2016-01-30 2 views
0

Я обновляю приложение Ember 1.13.0 до Ember 2.3.0, и мне грозит небольшая проблема, когда я не могу выгрузить запись из хранилища данных, не вызывая Ember для создания HTTP-запроса. Я не хочу удалять запись на сервере. Я просто хочу удалить его из Ember Data Store.Как выгрузить запись в Ember 2.3.0?

Я использовал следующий Ember DS.Store API: http://emberjs.com/api/data/classes/DS.Store.html#method_unloadRecord в Ember 1.13.0, и он отлично работал. Пример:

this.store.find('post', 1).then(function(post) { 
    this.store.unloadRecord(post); 
}); 

После обновления до 2.3.0, когда я контролирую вкладку сети в Chrome, угасающий делает запрос GET для find записи, а затем выгрузить его. Поскольку он не find (наш сервер не имеет API для соответствия этому вызову), он не выгружает запись, и изменения не отображаются в пользовательском интерфейсе.

Я попытался исправить это, вместо того, чтобы делать что-то вроде:

this.store.peekRecord('posts', 1).then(function(post) { 
    this.store.unloadRecord(post); 
}); 

, но это не похоже на работу. Каков правильный способ выгрузить запись из Ember Data без вызовов HTTP? Благодарю.

+0

'peekRecord' не возвращает обещание. Просто сообщение или нуль. – Keo

+0

@ Keo Затем как разгрузить эту запись? – Nag

+1

Попробуйте 'this.get ('store'). UnloadRecord (this.get ('store'). PeekRecord ('posts', 1));' – Keo

ответ

1

Данные Ember автоматически перезаписывают записи, чтобы синхронизировать их с сервером. Таким образом, findRecord() решает немедленно, но в фоновом режиме он запрашивает сервер и обновляет значения, когда он возвращается. Такое поведение было изменено в ember-data 1.13.0 и описано в toc_new-adapter-hooks-for-better-caching.

Вопрос с peekRecord заключается в том, что методы peek* просто запрашивают store и, следовательно, не нужно возвращать обещание. Поэтому ваш код должен выглядеть так:

const store = this.get('store'); 
const post = store.peekRecord('posts', 1); 
if (post) { 
    store.unloadRecord(post); 
} 
Смежные вопросы