Как вы обрабатываете асинхронные связанные модели в представлениях 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), вы можете отобразить имеющиеся у вас данные, получить "свежие" данные и повторно просмотреть представление.
В общем, это действительно зависит от опыта пользователя, который вы хотите предоставить.