Привязки сервера

Движок виджетов и моделей SberMobile строится из привязок контекстов сервера. Эти привязки определяют отношения между единицами данных (такими как переменные, функции и события) различных контекстов сервера. Каждая привязка рассчитывается на различных этапах выполнения виджета или модели. Результаты расчета используются для изменения данных контекста.

Привязки описаны в разделе Привязки. Пожалуйста, прочитайте этот раздел и темы, с которыми он соотносится. Только после того, как вы поймете привязки, ссылки и выражения, вы сможете с легкостью понять эту тему.

У каждой привязки есть три части:

  • Активатор и Условие привязки, определяющие, КОГДА обрабатывается привязка. Обработка может происходить при запуске виджета, нажатии кнопки, изменениях в модели данных или свойствах компонентов виджета и т.д.
  • Выражение привязки, определяющее, КАКОВ результат обработки привязок. Выражение привязки может ссылаться на различные свойства компонента "виджет" или различные данные из контекстов сервера. Это записывается в Языке выражений SberMobile.
  • Цель привязки, определяющая, ГДЕ будет записываться результат расчета выражения привязки, т.е., какое свойство компонента графического интерфейса пользователя или какие данные контекста будут меняться. Это Ссылка.

Порядок активации привязок

Поскольку привязки выполняются параллельно, порядок их выполнения нефиксированнный. Если две привязки активируются одновременно, нельзя определить, какая из них будет выполнена первой. Это важно учитывать при создании привязок, зависящих от результатов других привязок.

Например, одна привязка обновляет свойство контекста, а другая привязка активируется этим событием. Она запускает функцию, если указанное свойство контекста было обновлено. Обе привязки активируются одновременно. Если привязка, обновляющая свойство, выполнится первой, вторая привязка вызовет функцию. Если же первой будет выполнена привязка, вызывающая функцию, функция не будет вызвана. В результате, событие, которое должно было запустить выполнение этой привязки, будет проигнорировано.

Чтобы избежать непредсказуемости в поведении привязок, зависящих от других привязок, обязательно указывайте правильную цепочку активаторов привязок. Если привязка A зависит от активации привязки B, то активатор привязки A должен быть результатом активации привязки B. Например, если привязка A меняет свойство контекста, то привязка B должна активироваться этим свойством, а не отдельным событием. Это обеспечит выполнение привязок одну за другой, в правильном порядке.

Единственный способ получить предсказуемый порядок выполнения привязок  - это отключить параллелизм их выполнения, например, установить размер пулов потоков привязок на 1. Подробнее об использовании пулов потоков см. в разделе Выполнение привязок.