2013-05-01 2 views
2

Я получаю странный breezejs поведения загрузки в приложении, которое также использует requirejs.Breeze требует нокаута при использовании requirejs

Основная проблема заключается в том, что если мне требуется установить нагрузка бриза (плюс его зависимости q и jquery), бриз не может загрузиться, если нокаут не настроен как зависимость от бриза.

Uncaught Error: Module name "ko" has not been loaded yet for context: _. Use require([])

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

Итак, мой первый вопрос в том, почему ветер требует нокаута только потому, что я использую requirejs? Кажется, это ошибка.

Другой странное поведение WRT ветер и требуют, что если я загружаю требуется, а затем ветер без использования требуется, то ветер не загружается.

Uncaught Error: Mismatched anonymous define() module...

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

Итак, мой второй вопрос: почему же ветер, должны быть загружены до требуют? Просто кажется странным, поскольку две библиотеки не зависят друг от друга. Почему существует требуемый порядок загрузки?

ответ

0

С сайта ветер:

Breeze depends on one 3rd party JavaScript library, Q.js, which is included in the NuGet and download packages. Q.js is a popular implementation of the Common.js promises standard for managing asynchronous JavaScript.

Это означает, что если вы загрузили Q.js он может конфликтовать с requirejs, потому что это просто разные реализации загрузчика AMD.

также:

Except as noted, the other samples also require these libraries and they load the jQuery and Knockout scripts before the Q and Breeze scripts. Make sure you either follow their lead ... or know why you're doing it differently.

Вы должны быть в состоянии настроить, чтобы уйти без нокаута. Вот что в их исходном коде:

Возможные варианты «Ко», «backingStore» или «позвоночник». См. Метод breeze.config.initializeAdapterInstances.

http://www.breezejs.com/sites/all/apidocs/classes/config.html

Надеется, что это помогает.

ОБНОВЛЕНИЕ: Глядя на breeze source Я вижу, если требуется загрузчик, они попытаются загрузить нокаут как 'ko'. Вы можете настроить загрузчик requireJS, чтобы обойти это, указав свой собственный модуль «ko», который ничего не возвращает или возвращает false. Затем ветерок возвращается к «backingStore», и он не должен жаловаться на это.

UPDATE BY WARD (20 МАЯ 2013 ГОДА): Мы установим это в версии после v.1.3.3. Пожалуйста, обратитесь к this more recent S.O., где мы предоставляем временные консультации и объявим об этом.

+0

Q обеспечивает функциональность обещания - не AMD. Я не думаю, что между функциями Q и require существует некоторое совпадение. – steve

+0

Я просмотрел (и попытался) использовать 'breeze.config.initializeAdapterInstance ("modelLibrary", "backingStore", true)'.Бриз на самом деле написан для использования backingStore, если KO не загружен - это именно то, что я хочу. Проблема в том, что если я использую для загрузки бриза, ветер не загружается, если я не загружаю KO. Если мне нужно настроить загрузку KO и настроить ветерок для использования backingStore, тогда бриз работает по желанию (с угловым). Странность в том, что я загрузил KO и никогда не буду использовать его! – steve

+0

Глядя на источник бритвы, я вижу: https://github.com/IdeaBlade/Breeze/blob/master/Breeze.Client/Scripts/breeze.base.debug.js#L12728 Если требуется загрузчик, они попытаются загрузить нокаут как 'ko'. Вы можете настроить загрузчик requireJS, чтобы обойти это, указав свой собственный модуль «ko», который ничего не возвращает или возвращает false. Затем ветерок возвращается к «backingStore», и он не должен жаловаться на это. –

Смежные вопросы