2013-06-27 1 views
2

У меня много проблем с RequireJS, я получаю ошибки просто с помощью модуля define.Как правильно работать с RequireJS и его конфигурацией

Давайте предположим, что у меня есть такая конфигурация:

require.config({ 
    baseUrl: "js/", 
    paths: { 
     jquery: "libs/jquery/jquery-2.0.2.min", 
     handlebars: "libs/backbone/template/handlebars", 
     lodash: "libs/backbone/template/lodash.min", 
     backbone: "libs/backbone/backbone-1.0.0.min", 
     helper:"app/helper", 
     jquery_cookie:"libs/jquery/plugin/jquery.cookie", 
     text:"libs/require/text-2.0.7" 
    }, 
    shim: { 
     "lodash": { 
      exports: '_' 
     }, 
     "handlebars": { 
      deps:["jquery"], 
      exports: 'Handlebars' 
     }, 
     "backbone": { 
      deps: ["helper", "lodash", "handlebars", "jquery"], 
      exports: "Backbone" 
     } 
    }, 
    urlArgs: "bust=" + (new Date()).getTime() 
}); 


define(["jquery"], function ($) { 
    console.log('define "jquery" on config.js'); 
    return $; 
}); 
console.log("end config.js"); 

Первой, я попробовал классический путь, я загрузил файл config где у меня есть все dependances моих JavaScript файлов, я использую jQuery, Backbone и другие библиотеки.

<script type="text/javascript" data-main="config" src="js/libs/require/require-2.1.6.min.js"></script> 
<script type="text/javascript"> 
    require(["jquery"], function ($) { 
     console.log("jquery loaded"); 
    }); 
</script> 

При такой конфигурации я получаю эти ошибки и журналы последовательность:

Uncaught Error: Mismatched anonymous define() module: function(){return r} 
> http://requirejs.org/docs/errors.html#mismatch 
end config.js 
define "jquery" on config.js 

Кажется ошибка называется функцией require.config(...);

Я думал, что это была проблема нагрузки, поэтому я попытался использовать var require, как описано в RequireJS site, не решая его.

Абсурдная вещь: я работаю над полноэкранным приложением, созданным в Backbone с такой же конфигурацией, без каких-либо проблем, здесь мне нужно больше работать с разными видами, и я не могу начать, в основном, вся разница здесь. м с использованием CakePHP.

Почему это не сработает, где я ошибаюсь?

ответ

2

В используемой версии jQuery уже есть поддержка AMD. Поэтому вам не нужно использовать прокладку для него. Вы можете напрямую указать путь и начать использовать его.

Поскольку модуль уже определен в библиотеке jQuery, он выдает ошибки при попытке переопределить его. Следующий код пытается определить анонимный модуль.

define(["jquery"], function ($) { 
    console.log('define "jquery" on config.js'); 
    return $; 
}); 

удалите вышеуказанный код и должны нормально работать. Следующий код использует метод require для загрузки модуля jquery.

require(["jquery"], function ($) { 
    console.log($(document)); 
}); 

Надеюсь, это сработает.

+0

Спасибо за информацию, я удалил ее и обновил вопрос, к сожалению, он все равно не сработает и выбросит ту же ошибку. – vitto

+0

Проблема заключается в следующем коде: define (["jquery"], function ($) { console.log ('define "jquery" on config.js'); return $; }); Попробуйте удалить его – Tamillharasan

+0

Метод define() используется для определения модуля. попробуйте заменить «define» в вашем коде на «require». – Tamillharasan

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