BackboneJS, RequireJS — Uncaught ReferenceError: $ не определен

У меня есть приложения Backbone, в которых я использую RequireJS. Почему-то я всегда получаю сообщение об ошибке Uncaught ReferenceError: $ is not defined, так что я думаю, что неправильно загружаю свои библиотеки.

моя конфигурация RequireJS выглядит так:

require.config({

paths: {

    // Core libraries.
    jquery: 'lib/jquery/jquery',
    backbone: 'lib/backbone/backbone',

    // Templating.
    handlebars: 'lib/handlebars/handlebars',

    // Plugins.
    text : 'lib/requirejs-text/text',
    less: 'lib/require-less/less',
    lodash: 'lib/lodash/lodash.min',
    all: 'lib/all/all',
    imageload: 'lib/imageload/jquery.imagesloaded',
    selectivizr: 'lib/selectivizr/selectivizr-min',
    modernizr: 'lib/modernizr/modernizr.min',
    jqueryEffects: 'lib/jquery/jquery.effects',

    // App folders.
    collections: 'app/collections',
    models: 'app/models',
    routers: 'app/routers',
    templates: 'app/templates',
    views: 'app/views'
},

shim: {
    backbone: {
        deps: ['jquery', 'lodash', 'all', 'selectivizr', 'modernizr', 'less', 'jqueryEffects'],
        exports: 'Backbone'
    },
    lodash: {
        exports: '_'
    },
    handlebars: {
        exports: 'Handlebars'
    }
}
});

Я поместил <script data-main="js/config" src="js/lib/requirejs/require.js"></script> внутри тега <body> своей индексной страницы.

Так в чем здесь проблема?


person SHT    schedule 22.01.2014    source источник
comment
какая строка кода дает вам ошибку?   -  person Lucian    schedule 22.01.2014
comment
@SHT: jQuery не загружается до выполнения вашего скрипта, поэтому вы получаете ошибку $ undefined. Убедитесь, что jquery загружен, прежде чем выполнять что-либо после этого.   -  person Sumodh Nair    schedule 22.01.2014
comment
@SumodhNair Хм, точно, но я думал, что jQuery уже загружен, поэтому я действительно не знаю, что здесь изменить...   -  person SHT    schedule 22.01.2014
comment
Хм, хорошо, когда я удаляю большинство скриптов, которые я включил в shim: {backbone:{deps:[]}}, ошибка исчезает... Но хотя jQuery всегда загружается как первый скрипт, я не понимаю... странно   -  person SHT    schedule 22.01.2014
comment
@SHT jqueryEffects выглядит как плагин jQuery. Если это плагин jQuery, то где гарантируется, что jQuery загружается до jqueryEffects? Либо jqueryEffects должен знать об AMD и вызывать define сам по себе, либо вам нужно будет установить для него прокладку, например jqueryEffects: { deps: [ 'jquery'] }.   -  person Louis    schedule 23.01.2014
comment
возможный дубликат RequireJS - пользовательская js-библиотека не работает   -  person Louis    schedule 23.01.2014


Ответы (1)


"Uncaught ReferenceError: $ не определено"

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

Возможно, вы загрузили jQuery, но кажется, что он не загрузился в нужное время.

Вы использовали много подключаемых модулей, поэтому добавьте конфигурацию прокладки ко всем подключаемым модулям, не относящимся к AMD, которые используют jQuery.

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

person Yuvraj Patil    schedule 04.02.2014