Я пытаюсь сделать следующее:
- Получить данные с сервера
- Добавьте к моделям индекс с отсчетом от нуля до того, как представления будут уведомлены.
- Наконец, запустите события «рендеринга» для просмотров.
Я пытался сделать это, используя обратный вызов успеха в коллекции
Просмотреть до
initialize: () ->
@collection.on 'reset', @render, this
render: () -> ...render code...
Сбор до
search: () ->
@fetch {
success: @fetch_success
}
fetch_success: () ->
for i in [0...collection.models.length]
collection.models[i].set('go_index', i)
Делая что-то таким образом, представления запускали свои события рендеринга до того, как коллекция была обновлена обратным вызовом успеха. Решение, которое я придумал, заключалось в том, чтобы представления прослушивали событие fetched
, а затем запускали коллекцию, которая после успешного изменения коллекции:
Просмотреть после
initialize: () ->
@collection.on 'fetched', @render, this
render: () -> ...render code...
Сбор после
initialize: () ->
@on 'reset', @add_index_and_notify, this
add_index_and_notify: () ->
for i in [[email protected]]
@models[i].set('go_index', i)
@trigger('fetched')
Это отлично работает, мне просто интересно, является ли это самым элегантным способом сделать это или есть встроенный способ, который мне не хватает.
ОБНОВЛЕНИЕ 15 марта
Я придумал более чистое решение, которое не требует, чтобы представление выполняло какую-либо грязную работу, и мне не нужно создавать настраиваемое событие. Хитрость заключается в прослушивании события sync
(которое срабатывает после reset
)
Посмотреть окончательный вариант
initialize: () ->
@collection.on 'sync', @render, this
render: () -> ...render code...
Финал коллекции
initialize: () ->
@on 'reset', @add_index, this
add_index: () ->
for i in [[email protected]]
@models[i].set('go_index', i)
Надеюсь, этот шаблон может помочь кому-то в поиске в будущем.