Плагин Knockout Mapping с RequireJS: ошибка Uncaught: несоответствующий анонимный модуль define () - PullRequest
3 голосов
/ 20 марта 2012

У меня проблема с использованием плагина knockout.mapping в сочетании с RequireJS. В основном, сайт, на котором размещено мое приложение, загружает knockout, knockout.mapping и requirejs в этом порядке.

<script src="http://127.0.0.1/scripts/require.js" type="text/javascript"></script>
<script src="http://127.0.0.1/scripts/knockout.js" type="text/javascript"></script>
<script src="http://127.0.0.1/scripts/knockout.mapping.js" type="text/javascript"></script>

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

/// Обновление ///

Я написал эти два теста:

По сути, вы видите, что, если я сам загружаю require.js в свой проект, перед плагином mapping, то плагин mapping становится невидимым. Я предполагаю, что это связано с тем, как использует плагин картирования, требовать нокаута ... но я не могу понять, почему он не работает.

/// 2-е обновление ///

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

Представьте себе веб-приложение, которое определяет knockout.js и knockout.mapping.js в тегах скрипта. Затем на страницу загружается сторонний виджет, который использует requireJS для установления его зависимостей. Это та загрузка, которая, кажется, вызывает проблему. Так как некоторые библиотеки были загружены через старую школу, ручной путь, а другие загружались с использованием require, require, похоже, портит контекст существующих библиотек.

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

Я думаю, что мне нужен кто-то, кто очень хорошо знаком с RequireJS, чтобы прокомментировать размещение этих библиотек. Очевидно, что когда я создаю виджет для анонимного потребления, я не буду знать, как или потребители используют requireJS.

/// 3-е обновление /// Попытка прояснить проблему как можно лучше, возможно, это будет иметь больше смысла:

Существует ли какой-либо четко определенный шаблон, в котором вы могли бы вставить виджет, который использует RequireJS, в существующую веб-страницу, которая загружает ресурсы вручную? Казалось бы, это невозможно, поскольку RequireJS просто удвоит загрузку всего, что уже может загрузить традиционная страница.

1 Ответ

3 голосов
/ 14 апреля 2012

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

Теперь, если бы я мог просто набрать +50 баллов, я разозлилсяпрочь на этот вопрос назад:)

...