Как избежать глобальных переменных в Durandal 2

0

Как я знаю, Durandal 2.x не принимает глобальных библиотек. Вот код, который можно отключить для определения глобальных модулей из документации:

define('jquery', function () { return jQuery; });
define('knockout', function () { return ko; });

Если я правильно понимаю цель, эти зависимости должны использоваться в модулях следующим образом:

define(['jquery', 'ko'],
    function (jquery, ko) {
         debugger;
    });

Но ни одна из этих зависимостей (jquery, ko) не определена в рамках модуля. Не могли бы вы помочь мне разобраться, что мне здесь не хватает?

Теги:
requirejs
durandal

1 ответ

1
Лучший ответ

Есть два способа получить нокаут и 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 можно настроить таким образом.

Загрузите все через requierejs. Требуется только один скриптовый тег

<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 для полного набора доступных опций.

main.js

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 выдает ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню