Как вы обрабатываете асинхронные связанные модели в представлениях Backbone?

При рендеринге Backbone.View вы обычно передаете ему текущее состояние модели. model.toJSON() и, возможно, несколько дополнительных свойств. Это синхронная задача.

Как вы работаете с атрибутами в модели, которые требуют асинхронных задач, таких как идентификатор другой модели, которую нужно получить с сервера (например, person_id)

Разрешаете ли вы прикреплять атрибуты person к атрибутам моделей перед синхронизацией и рендерингом, или вы визуализируете представление и прослушиваете событие извлечения person для повторного рендеринга этой части представления после?

NB. Я использую Backbone.Marionette, поэтому я немного ограничен в изменении метода рендеринга.

1 ответ

Решение

Ответ: это зависит:-)

В зависимости от обстоятельств вы либо:

  • получить модель с сервера, а затем отобразить вид
  • обновить модель, которая уже отображается

Обычно, если вы отображаете "новые" данные (т. Е. Необходимо выбрать всю модель), я бы отображал представление загрузки во время выборки данных, а затем отображал бы новое представление (и данные), когда они были получены (см. https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/show/show_controller.js)

Но в других случаях (например, пользователь возвращается к списку продуктов "вам также может понравиться", например, на Amazon), вы можете отобразить имеющиеся у вас данные, получить "свежие" данные и повторно просмотреть представление.

В общем, это действительно зависит от опыта пользователя, который вы хотите предоставить.

Другие вопросы по тегам