使用Require.js导入jQuery,Underscore和Backbone的依赖性解析

时间:2012-10-31 12:45:25

标签: backbone.js requirejs underscore.js

我花了几个小时试图弄清楚为什么我的代码不起作用,因为它应该基于我试图遵循的几个教程。这就是事情。很多关于在Backbone上使用Require.js的教程和文章的代码看起来像这样:

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});

当我尝试运行此代码时,控制台会说“Backbone is undefined”。奇怪的是,jQuery对象被成功实例化为$。它只是'_'和“Backbone”未定义。所以我做了一些搜索并遇到了use.js

我被告知use.js的诞生是因为Backbone的主要贡献者不想改变Backbone.js的代码只是为了让它适合require.js,我理解。所以我尝试使用use.js在require的配置中指定Backbone的依赖设置,如下所示:

require.config({
  use: {
    'backbone': {
      'deps': ['use!underscore', 'jquery'],
      'attach': 'Backbone'
    },
    'underscore': {
      'attach': '_'
    }
  }
});

在添加此代码以及从原始定义调用'use!backbone'而不是要求'下划线'和'主干'之后,它终于有效了。但我不明白这里发生了什么。如果我必须完成所有这些工作来使Backbone工作,为什么所有这些文章和教程都没有提到这个事实?它几乎就像他们的版本工作正常而没有做到这一切。有什么变化吗?

这也是使用require.js处理Backbone的唯一方法吗?有更简单的方法吗? (最新方法)

3 个答案:

答案 0 :(得分:1)

也许这些信息可以帮助你...

// This set's up the module paths for underscore and backbone
require.config({ 
    'paths': { 
        "underscore": "libs/underscore-min", 
        "backbone": "libs/backbone-min"
    },
    'shim': 
    {
        backbone: {
            'deps': ['jquery', 'underscore'],
            'exports': 'Backbone'
        },
        underscore: {
            'exports': '_'
        }
    }   
}); 

require([
    'underscore',
    'backbone',
    'app'
    ], 
    function(_, Backbone, app){
        app.init();
});

http://jcreamerlive.com/2012/07/14/using-backbonejs-and-amplifyjs-in-a-requirejs-2-0-application/
https://github.com/jcreamer898/RequireJS-Backbone-Starter

答案 1 :(得分:0)

如果您使用的是RequireJS 2.0,则可以使用shim功能来包含非AMD模块。

以下文章可能有所帮助:

https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#wiki-shim

答案 2 :(得分:0)

这样做

define('backbone', [], function(){ return window.Backbone;});

通过这种方式,您已经定义了哪个骨干网和骨干网将附加到窗口。在最初设置需要的地方执行此操作。在初始化主干之后定义主干。

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});
希望有所帮助!

干杯! SUJ