将Jquery插件添加到Backbone + require.js代码中

时间:2012-05-09 09:05:02

标签: jquery jquery-plugins backbone.js requirejs

我有一个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”但它没有用。我不知道我在这里错过了什么。请帮助。

谢谢, 科莫尔。

2 个答案:

答案 0 :(得分:2)

jQuery实际上将自己定义为命名模块:

define( "jquery", [], function () { return jQuery; } );

通常you are discouraged添加自己的模块名称,但在jQuery的情况下,您只需要使用路径配置告诉RequireJS在哪里找到库:

require.config({
    paths: {
        jquery: 'lib/jquery',
    }
});

这应该允许您在jqueryrequire来电中使用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();
}