2013-06-05 2 views
1

Я искал фреймворк javascript, который поможет мне загружать в javascript асинхронно, чтобы я мог создавать элементы управления, которыми я мог бы делиться между приложениями &, убедитесь, что разные элементы управления совместно используют свои ссылочные структуры без основного приложения необходимо знать, какие библиотеки нужны. Я смотрю на requirejs, и мне это нравится совсем немного, но я обнаружил, что добавив его в приложение, основанное на KnockoutJS, «ko» global больше не был объявлен.Избегайте RequireJS, меняя глобальную регистрацию других фреймворков

Предположительно это потому, что KnockoutJS решил, что у меня есть AMD, и поэтому он оставил бы глобальное пространство имен. Мне было бы хорошо, если бы я загрузил его с помощью RequireJS, но это не так здорово, если он был загружен тегом скрипта. Очевидный ответ не загружает его таким образом, но проблема возникает, если существующее приложение не было написано для AMD, и я хочу добавить requirejs для облегчения доступа к моим общим элементам управления, и это нарушает существующее приложение.

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

Я вполне согласен использовать прокладку, чтобы выставлять не-AMD в методы AMD, но я не хочу добавлять RequireJS для воздействия на страницу другого кода, который явно не ссылается на него. Есть ли что-то вроде неконфликтного режима jQuery для RequireJS или, альтернативно, аналогичной структуры, которая не будет иметь нежелательных побочных эффектов?

ответ

1

Вы не можете настроить RequireJS для этого, потому что это не то, что требует RequireJS.

Нокаут проверяет, доступен ли RequireJS и изменяет способ привязки - это code.

И уже есть bug, написанный против этого, который в основном закрыт, «работая как сконструированный».

+0

Я не говорю об использовании define (['knockoutjs'], я говорю о том, чтобы просто ссылаться на него с помощью тега сценария и не загружать его должным образом, потому что его уже нужно. Я предполагаю, что речь идет о mix & match'ing AMD в элементах управления с обычными сценариями в родительском приложении (которые, как я думал, я мог бы сделать, но похоже, что вы просто не можете). Возможно, requirejs не является правильной структурой для работы ... – fyjham

+0

Повторю еще раз - это ничего не связано с RequireJS напрямую - это то, как Knockout реализовал его код загрузки. Код проверяет спецификации модуля CommonJS (node) или AMD (RequireJS) и загружает нокаут в качестве модуля в обнаруженной модульной системе. В противном случае он ставит ko объект в глобальном пространстве имен. Если вы используете модульную систему и все еще хотите «ko» в глобальном пространстве имен, вам придется добавить ее самостоятельно. Опять же, вам нужно сделать это, чтобы обойти e Knockout загружает себя, а не RequireJS. – Nate

+0

Я вижу, что это код knockoutjs, который делает это, но я даже сказал это в моем первоначальном вопросе. Но это все равно означает конец дня, если я возьму неизвестный веб-сайт «X» и добавлю requirejs к нему, есть вероятность, что сайт сломается. Независимо от основной причины, добавление requirejs вызывает сбои на сайте с использованием обычно используемых фреймворков. Если это так, и нет обходного пути, то я полагаю, что это непригодно для моего случая использования, кажется, что 100% AMD или 0% AMD - единственный прецедент, который действительно поддерживается при объединении этих фреймворков. – fyjham