Как получить 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' });
Другие вопросы по тегам