Как я могу восстановить элемент, который имеет ненаблюдаемые объекты в Knockout?

Как я могу восстановить элемент, который имеет невидимые объекты в Knockout? Предположим, у меня есть

Я могу связать это правильно,

{
"items":[
                    { "full": "Content\/ImageGallery\/full\/20120502_180612_Josh_Wave_Pint.jpg", "thumb": "content\/imagegallery\/thumb\/20120502_180612_Josh_Wave_Pint.jpg", "caption": "Picture" },
                    {"full":"Content\/ImageGallery\/full\/20130109_173902.jpg","thumb":"content\/imagegallery\/thumb\/20130109_173902.jpg","caption":"Picture"},
                    { "full": "Content\/ImageGallery\/full\/20130107_193641.jpg", "thumb": "content\/imagegallery\/thumb\/20130107_193641.jpg", "caption": "Picture" }
                    ] }

Но как восстановить это? это не работает,

ko.applyBindings(updatedJsonObject, $element[0]);
0
nl ja de
@JamesThorpe, к сожалению, я не могу сделать это наблюдаемым
добавлено автор user960567, источник
@JamesThorpe, на самом деле объект JSON исходит от кого-то еще.
добавлено автор user960567, источник
Похоже, вы тянете json-объект и привязываете его к своему шаблону, а затем получаете свежий набор данных json и хотите обновить отображаемый html? нокаут предназначен для привязки страницы к модели - я бы подумал о создании модели для хранения ваших данных, в данном случае наблюдаемого массива ваших объектов full/thumb/caption и обновления этой коллекции вместо попыток переподготовки. нокаут позаботится об обновлениях без необходимости переустановки
добавлено автор James Thorpe, источник
какой-либо конкретной причине? это обычный маршрут, с которым вы должны пойти нокаутом для предметов, которые хотите обновить?
добавлено автор James Thorpe, источник
Может быть, вы ищете JS-шаблонизатор, а не KnockoutJS?
добавлено автор paulslater19, источник

1 ответы

Если вы не можете сделать свой массив наблюдаемым массивом, тогда ваш основной вариант - разместить всю структуру внутри наблюдаемого, например:

var myStructure = ko.observable();

//update myStructure with new data
myStructure({[...]});

Затем вы будете привязаны к нему так:

<div data-bind="with: myStructure">
    
</div>

Теперь, хотя массив не наблюдается, всякий раз, когда вы обновляете myStructure (который является наблюдаемым), весь раздел будет повторно отображаться.

2
добавлено
Благодарю. Кажется, это работа. Я буду больше проверять и сообщать, сталкиваюсь ли я с проблемой.
добавлено автор user960567, источник
Извините, но это также не работает в моем сценарии. Проблема в том, что html и JSON поступают из собственного мобильного приложения. То, что я сейчас делаю, это сделать html таким же, как и в первый раз, а затем применить привязку снова. Пожалуйста, дайте мне знать, есть ли у этого варианта какие-либо недостатки.
добавлено автор user960567, источник
Благодарю. См. Этот скрипт jsfiddle.net/LhYUn Собственно, приложение имеет большую зависимость от собственного приложения. Вот почему я не пользуюсь наблюдаемым.
добавлено автор user960567, источник
Не уверен, что я понимаю. Можете ли вы поместить что-то в jsFiddle? Как правило, вы не будете пытаться применятьBindings к тем же элементам несколько раз. Это добавит дополнительные обработчики, и каждый элемент будет обновляться несколько раз.
добавлено автор RP Niemeyer, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском