Как включить jQueryUI в мое модульное приложение backbone.js с помощью RequireJS?

Я хочу включить jQueryUI в мое приложение backbone.js, используя RequireJS. Файл main.js, включенный в мой index.html, выглядит следующим образом:

require.config({
    paths: {
            jquery: 'libs/jquery/jquery-1.7.2.min',
            jqueryui: 'libs/jquery/jquery-ui-1.8.18.custom.min',
            underscore: 'libs/underscore/underscore-min',
            backbone: 'libs/backbone/backbone-optamd3-min',
            text: 'libs/require/text',
            templates: 'templates'
       }

});

require(['app'], function(App){
    App.start();
});

И для каждого файла model/view/router я просто включаю пространство имен "jquery" в начале блока "define" следующим образом:

define([
    'jquery',
    'underscore',
    'backbone',
    'views/categoryview',
    'text!templates/category.html'
    ], function($, _, Backbone, CategoryView, categoryTemplate){
        // Here comes my code
});

Но jQueryUI не может использоваться в этих файлах. Что-то не так с моим кодом? Или я должен также включить "jqueryui" в каждый блок "define" ? Но если я включу "jqueryui" в блок "define" , как мне назвать его в функции, чтобы избежать конфликта имен с jquery?

Ответ 1

Вы можете включить все файлы, которые только патят какой-либо другой объект (например, jQuery UI) в ваш основной файл следующим образом (вам нужно убедиться, что jQuery загружен перед jQuery UI):

require(['jquery', 'app', 'jqueryui'], function ($, App) { App.start(); });

Другим подходом является включение jQuery UI в каждый модуль, как вы уже упоминали.

Я лично предпочитаю первый подход, даже если он скрывает зависимости.

Ответ 2

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

например.

require.config({
    baseUrl: 'scripts/modules',
    paths:{
        jquery:'../libs/jquery',
        jqueryUI:"../libs/jquery-ui",
        underscore:'../libs/underscore',
        backbone:'../libs/backbone'
    },
    shim: {
        jqueryUI: {
            deps: ['jquery']
        },
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        },
        waitSeconds: 15
    }
});

Ответ 3

Довольно старый пост. Там инструмент доступен для преобразования jquery ui файлов в версию AMD, созданной jrburke. Надеюсь, это было бы полезно!

Ответ 4

Другие ответы немного устарели. Пользовательский интерфейс JQuery поставляется с поддержкой AMD. Если вы хотите, чтобы весь проект просто использовал bower install jquery-ui, а затем добавил его к путям. Никакой прокладки не требуется.

Если вы хотите загрузить подмножество пользовательского интерфейса jQuery, которое вам нужно в вашем приложении (при этом не загружайте лишнюю раздутость), просто используйте bower install jquery-ui, чтобы получить все, а затем используйте инструмент сборки RequireJS, называемый r.js, чтобы создать AMD пакет именно тех файлов, которые вам нужны.