Приложение, которое я создаю, требует использования iframes для редактирования текста wysiwyg, и эти iframes должны быть подключены к viewModel, но я обнаружил, что это конфликтует с нокаутом ... или, по крайней мере, нокаут не кажется применять привязки, когда я пытаюсь получить к ним доступ через родительский объект.
Вот код ...
<script type="text/javascript">
$(function(){
ko.applyBindings(parent.model.project, $('#root')[0]);
});
</script>
<ul id="root" data-bind="template: {name: function(){return type()},
foreach: populate() }"></ul>
<script id="document" type="text/html">
<li class="draft" draft="${draft()}" data-bind="css: {expanded: $data.expanded}">
<span data-bind="click: function(){parent.model.project.expand($data, 'draft')}">
${ordinal(draft())} Draft
<img src="icons/close-black.png"
data-bind="click: function(){parent.model.project.deleteDraft($data)},
css:{ only: function() {parent.model.project.drafts > 1} }"/>
</span>
<div>
<ul data-bind="css: {expanded: $data.expanded},
template: {
name: 'draft',
foreach: $data.draftItems,
}"
>
</ul>
</div>
</li>
</script>
<script id="draft" type="text/html">
{{if $data.name}}
<li class="${name}">${name}</li>
{{/if}}
</script>
ОК, это не текстовый редактор wysiwyg, но он все еще иллюстрирует мою точку зрения.
Теперь дело в том, что когда я писал это, это работало отлично. У меня была часть viewModel, на которую ссылаются все привязки, определенные в js-файле, доступ к которому осуществляется только через этот html ... но мне нужно, чтобы родительский окно обращалось к тому же ViewModel, как и в редакторе wysiwyg для кнопок панели инструментов и другие внешние элементы управления, поэтому я переместил эту часть viewModel в файл, где была определена остальная часть ... и теперь он не работает!
Во внешнем файле, который у меня был ранее, я все еще обращался к модели родительского представления, используя parent.model, но теперь, не имея прямого монопольного доступа к этой модели, он, похоже, не работает. Дело в том, что я могу получить доступ к модели представления с помощью console.log, я могу и из нее document.write, он запускает события обратно в viewModel, и мое представление обновляется изначально, но после этого начального оно больше не обновляется.
Есть ли способ решить эту проблему?