1

我将backbone.js 与require.js 一起使用。我尝试了一个教程,这是我的 index.html :

<script src="app/script/libs/require/require.js" data-main="app/script/main" type="text/javascript"></script>
<script src="app/script/router.js" type="text/javascript"></script>


<script type='text/javascript'>
  $(document).ready(function()
  {
    var appRouter = new AppRouter(); // Router initialization
    Backbone.history.start(); // Backbone start
  });
</script>

这是 main.js :

require.config({
  urlArgs: "bust=" + (new Date()).getTime(),
  paths: {
    jquery: 'libs/jquery/jquery',
    underscore: 'libs/underscore/underscore',
    backbone: 'libs/backbone/backbone'
  }
});
require(["jquery", "underscore", "backbone"],
  function ($, _, Backbone) {
    console.log("Test output");
    console.log("$: " + typeof $);
    console.log("_: " + typeof _);
    console.log("Backbone: " + typeof Backbone);
  }
);

这是我的控制台:

ReferenceError: Backbone is not defined
[Break On This Error]   
$(document).ready(function()


ReferenceError: $ is not defined
[Break On This Error]   
$(document).ready(function()

Test output
$: function
_: function
Backbone: object

Require.js 正在工作,但是主干和 jquery 未定义,我不知道它们有什么问题。

这是我的文件的结构:

在此处输入图像描述 请有任何想法。谢谢

4

2 回答 2

2

您还应该在shim 配置中声明您的库

require.config({
  urlArgs: "bust=" + (new Date()).getTime(),
  paths: {
    jquery: 'libs/jquery/jquery',
    underscore: 'libs/underscore/underscore',
    backbone: 'libs/backbone/backbone'
  },
  shim: {
        'backbone': {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        },
        'underscore': {
            exports: "_"
        }
    }
});
require(["jquery", "underscore", "backbone"],
  function ($, _, Backbone) {
    console.log("Test output");
    console.log("$: " + typeof $);
    console.log("_: " + typeof _);
    console.log("Backbone: " + typeof Backbone);
  }
);
于 2013-08-02T14:03:32.500 回答
1

通过您的设置,只有在将 Backbone 作为依赖项注入到 requireJS 模块中时,您才能使用它,它在全局名称空间中不可用。在 jquery、Backbone 或下划线等大多数模块中还需要你需要的东西似乎不是最好的主意。只需在您的 requireJS 主文件之前将它们作为脚本标记加载,一切都很好。

如果您想保留 shim 解决方案,您必须在 main.js 文件中启动您的应用程序

require.config({
  urlArgs: "bust=" + (new Date()).getTime(),
  paths: {
    jquery: 'libs/jquery/jquery',
    underscore: 'libs/underscore/underscore',
    backbone: 'libs/backbone/backbone'
  }
});

require(["jquery", "underscore", "backbone"],
  function ($, _, Backbone) {
    console.log("Test output");
    console.log("$: " + typeof $);
    console.log("_: " + typeof _);
    console.log("Backbone: " + typeof Backbone);

    $(document).ready(function() {
      var appRouter = new AppRouter(); // Router initialization
      Backbone.history.start(); // Backbone start
    });
  }
);
于 2013-07-12T06:50:48.727 回答