Как применить привязки к шаблону в отдельном «потоке» или асинхронно?

Не знаю, возможно ли это, потому что я не мог ничего найти в Интернете. У меня есть шаблон KO, и у меня около 100 записей.

В IE 8 (из-за неоптимального движка JS) загрузка страницы занимает около 15 секунд. В Firefox это занимает около 6 секунд.

Я подтвердил, что в IE около 5 секунд теряется на ko.applyBindings.

Есть ли способ применить привязки асинхронно? Возможно наличие значка загрузки, чтобы пользователи могли продолжать пользоваться страницей, пока KO обрабатывает шаблон.


person Joseph Caruana    schedule 06.03.2012    source источник
comment
Это несколько большой шаблон? Может быть, какой-то пример в jsfiddle?   -  person AlfeG    schedule 06.03.2012
comment
Кроссбраузерный способ запуска кода в отдельном потоке — разделить работу на куски и запустить их последовательно с помощью setTimeout(process_some_part, 0);   -  person kirilloid    schedule 06.03.2012


Ответы (1)


У меня была аналогичная проблема. setTimeout это то, что вам нужно использовать здесь. В моем приложении я:

  1. Инициализировать пустую (или довольно пустую) модель представления
  2. Применить привязки (которое показывает сообщение "Подождите..." из-за зависимого свойства модели, указывающего, все ли данные загружены).
  3. Добавьте фрагменты данных в viewModel (я предполагаю, что у вас есть наблюдаемый массив, который содержит большую часть ваших данных, поэтому вы просто вставите, скажем, 10 элементов за раз в наблюдаемый массив)

Это ответ, который заставил меня пойти с jsFiddle, показывающим, как использовать setTimeout в привязках:

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

person Mark Robinson    schedule 06.03.2012