2014-09-21 3 views
1

У меня есть несколько уникальное обстоятельство, когда я написал слой кэширования для данных ember, которые сериализуют записи в localstorage. Когда я десериализую свой кеш в модели данных ember-data, я использую this.store.createRecord('model_name', cacheData);. Эти записи, которые я кэшируют, имеют существующие значения на сервере. Это работает для меня хорошо, пока я не хочу записать save(). Сохранение считает, что запись является новой записью, даже если она имеет атрибут «id». Когда save() называется POST, делается на мой сервер приложений вместо PUT. Кто-нибудь знает способ помечать записи в магазине как не новые.Маркировка записей данных ember-данных как существующих

ответ

3

Вы должны использовать store.push добавить уже существующие записи вместо store.createRecord

http://emberjs.com/api/data/classes/DS.Store.html#method_push

+0

Я дам эту попытку довольно скоро. Моя локальная стратегия кэширования становится все более сложной, поскольку я пытаюсь закончить кеширование данных. Я хочу, чтобы у ember-data было какое-то средство для кэширования в localstorage. Это выглядит чище, чем использование createRecord. –

+0

Я использовал ваше решение вместо того, чтобы возиться с isNew. Это более чистое решение. Спасибо. –

1

Я не нашел ничего официального, но модели действительно имеют свойство isNew. Поскольку это свойство только для чтения, вы не можете установить его непосредственно, но вы можете установить его на объекте CurrentState так:

var model = this.store.createRecord('model_name', cacheData); 
model.set('currentState.parentState.isNew', false); 

model.get('isNew') // => false 

Я не могу говорить, является ли это лучший способ сделать это, но он должен делать то, что вы просите. Убедитесь, что у вас есть хорошие тесты :)

+0

Это является удивительным. Я искал атрибут точно так. Установка этого атрибута сделала трюк для меня. Хотелось бы, чтобы Ember-данные немного испекли в кешировании через localStorage. Спасибо. –

+0

Технически, на ваш ответ был дан ответ точно, что я просил, но IgotT указал, что я должен делать вместо этого. Спасибо за ответ. –

+0

fwiw Я бы этого не делал :) –

Смежные вопросы