骨干& Underscore未定义,加载思想

时间:2012-12-18 19:47:04

标签: javascript backbone.js underscore.js

我目前正在尝试学习BackboneJS以及随之而来的东西,但我无法真正让它发挥作用。 我的问题是,一旦我尝试使用Backbone对象,我就遇到了麻烦。所以我试着记录下这两个,给予。

undefined main.js:23
undefined main.js:24

代码如下。

// RequireJS configuration.
require.config({
  paths: {
    // Major dependecies.
    jquery: 'libs/jquery/jquery-1.8.3.min',
    underscore: 'libs/underscore/underscore-min',
    backbone: 'libs/backbone/backbone-min',

    // Template dir.
    templates: '../templates'
  },

  // Append query string, to avoid browser caching, while in dev.
  urlArgs: "bust=" +  (new Date()).getTime()
});

// Start application.
require([
  'underscore',
  'backbone'
//  'router'
], function(_, backbone) {
  console.log(backbone);
  console.log(_);
//  Router.initialize();
});

正如您所看到的,我已尝试在路由器中使用Backbone对象,但未成功。然后我尝试了我的main.js,同样的事情。

3 个答案:

答案 0 :(得分:6)

您需要使用require Shim作为Backbone,Underscore不支持AMD开箱即用。

require shim允许您加载非AMD模块(请参阅here)。请注意,exports对象是将用作模块的对象的名称。

paths: {
      // Major dependecies.
      jquery: 'libs/jquery/jquery-1.8.3.min',
      underscore: 'libs/underscore/underscore-min',
      backbone: 'libs/backbone/backbone-min',

      // Template dir.
      templates: '../templates'
},
shim: {
    backbone: {
        deps: ["underscore", "jquery"],
        exports: "Backbone"
    },

    underscore: {
        exports: "_"
    }
}

另一种方法是将脚本直接包含在HTML中。

<script src="libs/jquery/jquery.js"></script>
<script src="libs/underscore/underscore.js"></script>
<script src="libs/backbone/backbone.js"></script>

答案 1 :(得分:2)

就我个人而言,我发现很多更容易让Backbone(以及Underscore和jQuery)脱离Require。您可以通过正常方式加载它们(通过脚本标记),然后在此之后执行所有需要加载,一切都将完美运行。你会有一些全局变量($,_和Backbone),但除此之外,我发现这种方法存在缺点。

或者,你可以浪费大量的时间玩垫片,这样可以将Backbone正确地带到Require-land ......但是如果你不需要那么浪费那个时间?另外,如果你这样做,你必须在每个文件的define调用中包含jQuery / Backbone / Underscore,这有点浪费时间/精力。

答案 2 :(得分:0)

我怀疑你通过require.js引用文件的方式是错误的(或者主干与require不一致)。检查浏览器的开发人员工具,确保您实际上正在下载文件。 “控制台”或“网络”选项卡应指示您是成功获取文件(HTTP代码200),还是找不到它们(HTTP代码404),或者它甚至没有尝试(“网络”中没有行)在所有)。

此外,请尝试将require.js完全从循环中取出,并使用标准<script>标记将文件直接加载到您的页面上。这样你就知道你的文件和变量按预期工作了。