我花了几个小时试图弄清楚为什么我的代码不起作用,因为它应该基于我试图遵循的几个教程。这就是事情。很多关于在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的唯一方法吗?有更简单的方法吗? (最新方法)
答案 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