Мануал по Bubble
  • 0. Введение
  • 1. Основы Bubble
  • 1.1 Что такое Bubble?
  • 1.2 Основные принципы
  • 1.3 Стратегии изучения Bubble
  • 1.4 Владение данными и приложением
  • 1.5 Допустимое использование
  • 2. Редактор приложения
  • 2.1 Основные разделы интерфейса
  • 2.2 Ключевые принципы
  • 2.3 Инструменты
  • 2.4 Горячие клавиши и Помощь
  • 3 Создание интерфейса
  • 3.1 Основные принципы
  • 3.2 Создание адаптивных страниц
  • 3.3 Управление с помощью условий
  • 3.4 Использование стилей
  • 3.5 Использование пользовательских шрифтов
  • 3.6 Советы при проектировании
  • 3.7 Использование шаблона
  • 4 Создание рабочих процессов
  • 4.1 Общие принципы
  • 4.2 Управление с помощью условиями
  • 4.3 Использование пользовательских процессов
  • 4.4 Советы по созданию рабочих процессов
  • 5 Работа с данными
  • 5.1 Ключевые понятия
  • 5.2 Тип Пользователь
  • 5.3 Сохранение данных
  • 5.4 Отображение данных
  • 5.5 Создание динамических выражений
  • 5.6 Пользовательские состояния элементов
  • 5.7 Вкладка Данные
  • 5.8 Конфиденциальность и безопасность
  • 6 Структурирование приложения
  • 6.1 Ключевые принципы
  • 6.2 Многостраничные приложения
  • 6.3 Элементы многократного использования
  • 7 Использование плагинов
  • 7.1 Для чего нужны плагины?
  • 7.2 Установка и использование плагинов
  • 7.3 Специальные плагины
  • 7.4 Создание плагинов
  • 8 Настройки приложения
  • 8.1 Версии приложения
  • 8.2 Личные и публичные приложения
  • 8.3 Пользовательские домены и SSL
  • 8.4 Политика паролей
  • 8.5 Визуальные настройки
  • 8.6 Язык и сообщения внутри приложения
  • 8.7 Социальные сети и SEO
  • 9 Использование API Баббла
  • 9.1 Примеры использования API
  • 9.2 Определение API
  • 9.3 Использование API
  • 9.4 Запланированные рабочие процессы
  • 9.5 Примеры и руководства
  • 10 Тестирование приложения
  • 10.1 Основные стратегии
  • 10.2 Использование отладчика
  • 10.3 Использование логов сервера
  • 11 Поддержка приложения
  • 11.1 Контроль версий
  • 11.2 Копирование и восстановление базы данных
  • 11.3 Массовые операции
  • 11.4 Комментирование
  • 11.5 Совместная работа
  • 12 Архитектура, оптимизация и ограничения движка Баббл
  • 13 Создание плагинов
  • 13.1 Редактор плагинов
  • 13.2 Основные и общие настройки
  • 13.3 Добавление API-соединений
  • 13.4 Создание элементов
  • 13.5 Создание действий
  • 13.6 Загрузка данных
  • 13.7 Публикация и контроль версий
  • 13.8 Интеграция с GitHub
  • 14 Тарифы на аренду выделенных серверов
  • 14.1 Преимущества выделенных кластеров
  • 14.2 Использование выделенного кластера
  • 15 Учетные записи, тарифы и оплата
  • 15.1 Управление учетной записью
  • 15.2 Тарифы и оплата
  • 15.3 Создание приложений на заказ
  • 15.4 Продажа на торговой площадке Баббл
Powered by GitBook
On this page

Was this helpful?

13.6 Загрузка данных

При обращении к свойствам типа Object или List of Objects вы можете запросить данные, которые еще не посылались веб сервером Bubble в браузер пользователя. Например, у вас есть свойство в виде списка my_list , вы совершаете вызовproperties.my_list.get(0,99) , и часто бывает так, что первые 100 записей списка еще не загружались с сервера.

Опытные javascript программисты знакомы с асинхронной загрузкой данных с помощью функций обратного вызова. Вместо этого мы попытаемся управлять автоматической загрузкой данных в фоновом режиме. В большинстве случаев мы можем написать код так, будто бы propetties.my_list.get(0,99) возвращает значение мгновенно, а не асинхронного, даже если в фоне вам нужно было обратиться к серверу для получения ответа.

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

Когда ваш код обращается к данным, которых нет в браузере, происходит две вещи:

  1. Мы мгновенно отправляем асинхронный запрос на веб сервер для загрузки данных.

  2. Мы выдаем ошибку, которая прерывает выполнение написанной вами функции и сообщает API, что мы ждем данные для продолжения работы.

После того, как данные загружены, мы перезапускаем исполнение функции. На этот раз, когда мы запросим данные, они будут доступны, и выполнение функции будет продолжено.

Для вас эта механика имеет два последствия:

  1. Функции, которые вы запускаете один раз, такие как выполнение действия, фактически могут запускаться множество раз, так как мы последовательно загружаем данные, к которым обращается функция. Аналогично, для элемента функция update будет перезапускаться не только при изменении свойств этого элемента, но и в моменты окончания загрузки запрошенных вами данных или их последующего изменения.

  2. Выражения try...catch , которые содержат функции загрузки данных, будут ловить выдаваемую нами ошибку, что приведет к неправильной работе данного механизма.

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

Во-первых, всегда загружайте данные перед началом выполнения ваших функций, перед изменением любых внешних для функции состояний. Например, если вы создаете элемент, который принимает в себя список и отображает его в браузере, загружайте список отображаемых элементов, как и любые поля этих элементов перед тем, как изменять объектную модель документа (DOM). Мы рекомендуем делать именно так, потому что если какие-то данные не готовы, ваш код не будет вносить никаких изменений до загрузки всех данных. И наоборот, если вы написали функцию, которая загружает первые несколько первых элементов списка, отображает их, а затем загружает еще часть, вы можете столкнуться с ситуацией, что первые несколько элементов будут отображаться несколько раз.

Во-вторых, либо избегайте помещения кода загрузки данных в try...catch , либо, если вам нужно это сделать, то убедитесь, что вы заново возвращаете специальные ошибки. Эти ошибки вы можете обнаружить, посмотрев свойство message: оно должно быть "not ready"/"не готово".

Например:

try { 
    var myData = properties.my_list.get(0,99);
    doSomethingWith(myData);
} catch (err) {
    //Re-throw not-ready errors...
    if (err.message === 'not ready') {
        throw err;
    }
    //And handle other errors...
    myErorrHandlingLogic(err);
}
Previous13.5 Создание действийNext13.7 Публикация и контроль версий

Last updated 4 years ago

Was this helpful?