我有一个BackboneJs + jquery代码,现在我试图使用requireJs模块化。 在我的代码中,我使用了额外的jquery插件,如nanoscroller等。
之前只是调用脚本就足够了:
<script type="text/javascript" src="../javascript/jquery.nanoscroller.js"></script>
现在我试图通过以下方式调用脚本:
define([
'jQuery',
'Underscore',
'Backbone',
'text!templates/landingTemplate.html',
'library/jquery/jquery.nanoscroller.js'
], function($, _, Backbone, LandingTemplate){
var LandingView = Backbone.View.extend({
但我收到以下错误:
Error: jQuery is not defined
Source File: http://localhost:8080/sample/Main%20App/Backbone%20+%20Require.js%20Impl/js/library/jquery/jquery.nanoscroller.js
我尝试了几件事: 使用“require”而不是“define”但它没有用。我不知道我在这里错过了什么。请帮助。
谢谢, 科莫尔。
答案 0 :(得分:2)
jQuery实际上将自己定义为命名模块:
define( "jquery", [], function () { return jQuery; } );
通常you are discouraged添加自己的模块名称,但在jQuery的情况下,您只需要使用路径配置告诉RequireJS在哪里找到库:
require.config({
paths: {
jquery: 'lib/jquery',
}
});
这应该允许您在jquery
和require
来电中使用define
。
配置RequireJS的方法不止一种,您可以read about in the API docs。
答案 1 :(得分:2)
错误不是因为没有正确定义Jquery。这是因为nanoscroller库在jQuery之前被加载了。 解决方案是使用“order”插件来确保在加载nanoscroller库之前加载jQuery。以下是我如何解决问题:
require(['order!jQuery', 'order!library/jquery/jquery.nanoScroller'], function ($) {
$("#myFields").nanoScroller();
}