Ответ 1
Недавно у меня была такая же проблема с плагином jSignature и моим представлением "Нокаут". Мне нужно, чтобы KO-представление полностью отображалось до того, как я вызвал jSignature, в противном случае он не сделал бы правильный размер.
Я исправил его привязкой шаблона и функцией обратного вызова afterRender, чтобы вызвать работу jQuery.
Здесь KO docs:
http://knockoutjs.com/documentation/template-binding.html
Вот быстрый jsfiddle, показывающий, как вы можете его использовать:
Фокус в том, что вы можете использовать обратный вызов afterRender привязки шаблона, фактически не используя сам шаблон. Вместо этого вы переносите весь существующий HTML в div, который будет вызывать обратный вызов afterRender:
<div data-bind="template: {afterRender: initApp}">
<!-- your existing HTML here -->
</div>
initApp - это функция, выполняющая работу jQuery.
Я думаю, что, как правило, нужно делать то, что вам нужно, хотя, если ваш HTML особенно сложный или у вас много просмотров, которые нужно отображать на одной странице, вам может потребоваться немного больше работы. Дайте мне знать, как вы справитесь - может быть, я попытаюсь помочь немного больше, если это не совсем исправляет вашу проблему так же легко, как и моя!
Обновление - после комментария JACL ниже - здесь расширенная версия скрипта, показывающая этот метод, также работающий с ko-if. Каждый раз, когда вы показываете/скрываете "виджет", используя этот флажок, применяется другой случайный цвет, чтобы указать, что функция afterRender выполняет свою работу.