2016-01-21 2 views
0

Я знаю, что мой вопрос настолько похож на этот one, но у меня такая же проблема, и ни одно из решений не работает для меня.jQuery не работает с RequireJS

Моя структура каталогов выглядит следующим образом:

static 
    lib 
     require.js 
     jquery-1.11.3.js 
     progressbar.js 
    client 
     client.messages.js 
     client.js 
    main.js 
    config.js 

Мой HTML-файл, как это:

<script src="{{ url_for('static', filename='scripts/lib/require.js') }}"></script> 

<script> 
    var require = { 
     baseUrl: "/static/script", 
     paths: { 
     /* Load common libraries from CDN and fallback to local versions. */ 
     "jquery":  "lib/jquery-1.11.3.min.js", 
     "progressbar": "lib/progressbar.min.js", 
     "messages": "client/client.messages.js" 
     } 
    }; 
</script> 

<script src="{{ url_for('static', filename='scripts/main.js') }}"></script> 

Я также пытался сделать конфигурацию в файле config.js, который был, как:

var require = { 
     baseUrl: "/static/script", 
    paths: { 
     /* Load common libraries from CDN and fallback to local versions. */ 
     "jquery":  "lib/jquery-1.11.3.min.js", 
     "progressbar": "lib/progressbar.min.js", 
     "messages": "client/client.messages.js" 
    } 
}; 

, а затем файл HTML был, как:

<script src="{{ url_for('static', filename='scripts/config.js') }}"></script> 
<script src="{{ url_for('static', filename='scripts/lib/require.js') }}"></script> 
<script src="{{ url_for('static', filename='scripts/main.js') }}"></script> 

Далее в моей HTML файл Существует эта строка:

<body onload="bodyLoaded()"> 

и это bodyLoaded() функции в моем main.js:

var bodyLoaded = function() { 
    //load scripts first 
    var scripts = ['static/scripts/client/client.messages.js', 'static/scripts/client/client.js']; 
    $.getScript(scripts[0], function() { 
     $.getScript(scripts[1], function() { 
      pluginCheck(); 
     }); 
    }); 
}; 

Ошибки я получаю:

Uncaught ReferenceError: $ is not defined

для этой строки в bodyload():

$.getScript(scripts[0], function() { 

Я что-то упустил?

+0

Вы пытались изменить '$' для 'jQuery'? –

+0

Извините, вы можете сделать свою мысль более понятной? Что именно я могу изменить? – Galil

+0

Попробуйте изменить код '$ .getScript (...' to 'jQuery.getScript (...' –

ответ

2

Ну ... вы загружаете RequireJS, вы его настроили, но вы не используете , используя его.

Один из способов получить то, что вы хотите, будет:

var bodyLoaded = function() { 
    //load scripts first 
    var scripts = ['static/scripts/client/client.messages.js', 'static/scripts/client/client.js']; 
    require(['jquery'], function ($) { 
     $.getScript(scripts[0], function() { 
      $.getScript(scripts[1], function() { 
       pluginCheck(); 
      }); 
     }); 
    }); 
}; 

Я добавил require(['jquery'], ... так, что JQuery на самом деле загружается.

Это, как говорится, очень вероятно, что это не решение, с которым вы хотите закончить. Во-первых, мне кажется, что client.messages.js и client.js являются кандидатами на загрузку RequireJS, поэтому на самом деле RequireJS должен быть настроен для их поиска (я вижу client.message.js в конфигурации, но не client.js). Скорее всего, вам нужно будет использовать shim, чтобы определить зависимости между ними.

Предлагаю вам тщательно прочитать RequireJS' documentation.

+0

Спасибо большое! Это была проблема. Я до сих пор не использовал 'client.js', и поэтому я не загружал. – Galil

Смежные вопросы