нокаут: доступ к View Model через iframe? - PullRequest
0 голосов
/ 30 августа 2011

Приложение, которое я создаю, требует использования 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, и мое представление обновляется изначально, но после этого начального оно больше не обновляется.

Есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 03 марта 2012

iframes не будут наследовать привязки от родительских элементов.

Вы не можете заставить это работать таким образом, поскольку iframes действительно являются отдельными страницами на другой странице.

Каждый iframe должен иметь свою собственную модель представления.Если эта модель представления должна исходить из другой модели представления, вам необходимо предоставить доступ к этим данным через глобальные объекты JS или передачу сообщений или какой-либо другой механизм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...