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 не се зарежда преди изпълнението на вашия скрипт, затова получавате $ недефинирана грешка. Уверете се, че 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, но изглежда, че не се е заредил навреме.

Използвали сте много плъгини, така че добавете shim конфигурация към всички не-AMD плъгини, които използват jQuery.

Проверете кой плъгин jquery е зареден преди jquery, за да можете да стигнете до първопричината.

person Yuvraj Patil    schedule 04.02.2014