IBM Worklight — логика JSONStore для обновления данных с сервера и возможности работы в автономном режиме

в настоящее время API JSONStore предоставляет метод load(), о котором в документации говорится:

Эта функция всегда сохраняет все, что возвращается от адаптера. Если данные существуют, они дублируются в коллекции". Это означает, что если вы хотите избежать дубликатов, вызывая load() для уже заполненной коллекции, вам нужно очистить или удалить коллекцию перед этим. Но если вы хотите иметь возможность чтобы сохранить элементы, которые у вас уже есть в коллекции, на случай, если больше нет подключения и ваше приложение перейдет в автономный режим, вам также необходимо отслеживать эти существующие элементы.

Поскольку API не предоставляет опцию «перезаписи», которая заменяла бы существующие элементы в случае успешного вызова адаптера, мне интересно, какую логику следует внедрить, чтобы управлять доступностью данных в автономном режиме и возможность обновления в любое время? Не так уж очевидно управлять всеми случаями сбоя путем вложения кода JS из-за промисов...

Спасибо за ваши советы!


person Etienne N    schedule 05.09.2013    source источник


Ответы (1)


Один из подходов для достижения этого:

  • Используйте улучшение для создания собственного метода загрузки (например, loadAndOverwrite). У вас должен быть доступ ко всем переменным, хранящимся внутри экземпляра JSONStore (имя коллекции, имя адаптера, имя процедуры загрузки адаптера и т. д. — вы, вероятно, будете использовать эти переменные на шаге invokeProcedure ниже).

  • Вызовите push чтобы убедиться, что нет локальных изменений.

  • Вызовите invokeProcedure для получения данных все необходимые переменные должны быть предоставлены в контексте расширения.

  • Найдите, существует ли документ, а затем удалить его. Используйте {push: false}, чтобы JSONStore не отслеживал это изменение.

  • Используйте добавить для добавления нового/обновленного документа. Используйте {push: false}, чтобы JSONStore не отслеживал это изменение.

  • В качестве альтернативы, если документ существует, вы можете использовать замените, чтобы обновить его.

  • В качестве альтернативы вы можете использовать removeCollection и вызовите загрузить еще раз, чтобы обновить данные.

В примере показано, как использовать все эти вызовы API здесь.

Что касается промисов, прочитайте это из InfoCenter и это из HTML5Rocks. Google может предоставить дополнительную информацию.

person cnandreu    schedule 05.09.2013
comment
У меня есть ощущение, что то, что я пытаюсь сделать, является довольно распространенным шаблоном, и я вижу, что для управления им требуется много логики. Я надеюсь, что в будущем API будет развиваться, чтобы управлять этим очень просто. - person Etienne N; 05.09.2013
comment
Будущая работа JSONStore в значительной степени зависит от потребностей клиентов, хороший способ сообщить об этом — сделать запрос функции. - person cnandreu; 05.09.2013