Как получить JSData DS#create() для сохранения в хранилище данных
Исходя из приведенного ниже кода, я ожидаю, что значение консоли будет увеличиваться при каждом запуске save()
функция. Однако номер не обновляется. Поэтому я не вижу никаких созданных значений, введенных в хранилище при создании.
Budget = DS.defineResource('budget')
function save(){
Budget.create(this.budgetItem, {upsert: true})
.then( ( ) => {
Budget.findAll().then((data)=>console.log(data.length))
})
}
Я использую jsdata-angular.
После первого сохранения findAll()
выполняет, он получит записи с сервера, а затем кеширует их. После этого он не выполняет будущих обращений к серверу при выполнении findAll() (это ожидаемое поведение), однако он также не вводит вновь созданные значения в хранилище.
Все мои конфиги остались без изменений. Я использую все значения по умолчанию.
1 ответ
DS#findAll
предназначен для извлечения записей из персистентного слоя через адаптер и загрузки их в хранилище. По умолчанию, если вы делаете findAll
позвоните, а затем сделать то же самое findAll
позвони еще раз (с тем же query
аргумент), а затем вместо нового запроса JSData возвращает вам исходный результат. Вы можете изменить это поведение двумя способами:
- Задавать
useFilter
вtrue
иметь свойfindAll
вызов вызоваDS#filter
и возвращаю вам результат. - Задавать
bypassCache
вtrue
принудительно перезагружать данные через адаптер.
Как общее правило, findAll
для асинхронной загрузки записей в хранилище (например, через GET-запрос HTTP-адаптера), и filter
предназначен для синхронного выбора записей из магазина, когда они вам нужны (например, отображение их в вашем представлении).
Например, в одном месте вы делаете:
// Post records get retrieved and loaded into the store
store.findAll('post', { status: 'published }).then(...);
Тогда в другом месте:
// Need to display post records in your View
$scope.posts = store.filter('post', { status: 'published' });