2012-06-11 2 views
4

Я использую нокаут с картографическим плагином.
У меня возникли проблемы с инициализацией страницы ПЕРЕД доставкой данных сервера JSON.Отображение нокаута - данные после загрузки JSON

Все отлично работает в сценарии:
1. прибудет JSON
2. выполнить VM = ko.mapping.fromJS(result);
3. выполнить ko.applyBinding(VM);

однако если JSON требуется некоторое время, чтобы вернуться (например, 10 секунд) моя страница должна быть инициализируется до возвращения json. Но если я делаю ko.applyBinding(VM); с пустой виртуальной машиной (let say VM = {};), чем вызов для JSON, а затем снова перевяжите его - это не сработает.

Так что мой вопрос: как восстановить модель с нокаутом? Я не хочу изменять значение одного наблюдаемого, но перепроверять всю виртуальную машину (модель просмотра), потому что структура моих данных должна быть сопоставлена ​​с JSON - и это неизвестно до возвращения JSON.

ответ

4

Я считаю, что проблема, которую вы описываете, заключается в том, что вещи не будут визуализироваться (и будут фактически давать ошибку) в вашем шаблоне сразу, и эта ошибка предотвратит перерисовку при поступлении данных с сервера.

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

Обновление: более вероятно, что вы заменяете значение виртуальной машины. Это уже не объект, привязанный к элементам интерфейса.

Вы можете просто использовать альтернативную форму вызова ko.mapping.fromJS.

ko.mapping.fromJS(result, {}, VM); 
+0

нет, нет JS ошибка. все в порядке. проблема в том, что начальная пустая связанная виртуальная машина будет связываться, а страница пуста (это нормально), но когда я хочу перепрограммировать VM (со сложной структурой вложенных массивов), она не будет переинсталлировать (перерисовывать). Другими словами - если я свяжу что-то простое (пустое) один раз, его нельзя перестроить с более сложной структурой. – JohnnyBzz

+0

альтернативная версия тоже не работает. Я имею в виду, что это работает, если 1-я привязка была с пустым элементом, но содержала структуру ... Я имею в виду, если бы я связывал сложную структуру массива (с вложенными массивами и т. Д.), Но все они пустые, а затем связывали правильные данные из JSON (с те же структуры данных), чем это работает ... однако я хочу сначала связать его с пустым элементом ... а затем с данными из JSON. – JohnnyBzz

Смежные вопросы