Как я знаю, Durandal 2.x не принимает глобальных библиотек. Вот код, который можно отключить для определения глобальных модулей из документации:
define('jquery', function () { return jQuery; });
define('knockout', function () { return ko; });
Если я правильно понимаю цель, эти зависимости должны использоваться в модулях следующим образом:
define(['jquery', 'ko'],
function (jquery, ko) {
debugger;
});
Но ни одна из этих зависимостей (jquery, ko)
не определена в рамках модуля. Не могли бы вы помочь мне разобраться, что мне здесь не хватает?
Есть два способа получить нокаут и jQuery (и другие сторонние библиотеки), загруженные в Durandal.
<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript" src="~/Scripts/knockout-2.3.0.js"></script>
<script type="text/javascript" src="~/Scripts/bootstrap.js"></script>
например, просмотреть образцы Microsoft.NET https://github.com/BlueSpire/Durandal/blob/master/platforms/Microsoft.NET/Samples/Durandal.Samples/Views/Home/Index.cshtml#L31
В этом случае вы должны использовать вышеупомянутый синтаксис, чтобы make requires знали, что эти библиотеки уже загружены, потому что Durandal interaly использует их как модули AMD. Однако в ваших собственных модулях вы можете опустить эту декларацию, поскольку "ko" и "$" доступны на глобальном уровне.
Для некоторых людей это прагматичный подход, так как легче иметь дело с сторонними библиотеками, которые не совместимы с AMD.
Если избегать глобальных привязок, это главный приоритет, чем requirejs можно настроить таким образом.
<script src="lib/require/require.js" data-main="app/main"></script>
например, просмотреть образцы HTML https://github.com/BlueSpire/Durandal/blob/master/platforms/HTML/Samples/index.html#L43
В main.js есть объект requirejs.config
с конфигурацией пути и прокладки. См. Http://requirejs.org/docs/api.html для полного набора доступных опций.
requirejs.config({
paths: {
'text': '../lib/require/text',
'durandal':'../lib/durandal/js',
'plugins' : '../lib/durandal/js/plugins',
'transitions' : '../lib/durandal/js/transitions',
'knockout': '../lib/knockout/knockout-2.3.0',
'bootstrap': '../lib/bootstrap/js/bootstrap',
'jquery': '../lib/jquery/jquery-1.9.1'
},
shim: {
'bootstrap': {
deps: ['jquery'],
exports: 'jQuery'
}
}
});
например https://github.com/BlueSpire/Durandal/blob/master/platforms/HTML/Samples/app/main.js
На этот раз в ваших собственных модулях вы должны объявить "нокаут" и "jquery" как зависимость (если вы их используете), в противном случае requirejs выдает ошибку.