我是Require.js的新手,我正在尝试做一些我认为很简单但却开始变得痛苦的事情。
我正在尝试为我的Backbone应用程序定义全局命名空间,并将其作为模块加载。这是我的命名空间(main.js):
define(
['jquery',
'underscore',
'backbone',
'GlobalRouter'
],
function($, _, Backbone) {
var App= {
Models: {},
Views: {},
Collections: {},
Routers: {},
init: function() {
new App.Routers.GlobalRouter();
Backbone.history.start();
}
}
return App;
});
这是我的config.js文件:
require.config({
// your configuration key/values here
baseUrl: "js", // generally the same directory as the script used in a data-main attribute for the top level script
paths: {
'jquery' : '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min',
'underscore': 'vendor/underscore-min',
'backbone': 'vendor/backbone-min',
'marionette': 'vendor/backbone.marionette',
'main' : 'main'
}, // set up custom paths to libraries, or paths to RequireJS plugins
shim: {
'underscore': {
exports: '_'
},
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'main' : {
deps: ['underscore', 'jquery', 'backbone', 'GlobalRouter'],
exports: 'TEWC'
}
} // used for setting up all Shims (see below for more detail)
});
define([
'jquery',
'underscore',
'backbone',
'main'
],
function($, _, Backbone, App, GlobalRouter) {
console.log(App)
alert('hit ')
$(function() {
App.init();
});
}
);
好的方法,这是我的路由器:
define([
'jquery',
'underscore',
'backbone',
'main'
],
function($, _, Backbone, TEWC) {
TEWC.Routers.GlobalRouter = Backbone.Router.extend({
routes: {
"" : "index",
"documents/:id" : "edit",
"login" : "login"
},
edit: function(id) {
alert('edit')
},
index: function() {
alert('index')
},
login: function() {
alert('login')
}
});
});
过去,我收到的是“app is undefined error”。现在,几分钟后我收到一个加载超时错误:
Uncaught Error: Load timeout for modules: main
然而,警报不会触发,并且main.js似乎没有被加载,但我相信路由器确实如此,并且它没有咆哮TEWC未定义 - 所以它可能正在加载,即使它是不在我的网络选项卡中?
这可能是一个新手问题 - 有没有人对此有任何见解?
答案 0 :(得分:2)
以下代码未定义GlobalRouter,但它已传递给define回调
define([
'jquery',
'underscore',
'backbone',
'main'
],
function($, _, Backbone, App, GlobalRouter) {
console.log(App)
alert('hit ')
$(function() {
App.init();
});
}
将GlobalRouter
添加到define
其次,当它无法加载main
时,您可以从控制台检查它尝试访问的URL是什么?这很可能是一种错误的配置。
答案 1 :(得分:2)
如果我没有弄错你的问题是在config.js
中,在require.config()之后,你的define()应该是一个require()。
进一步解释。你现在有:
define([
'jquery',
'underscore',
'backbone',
'main'
...
此define
应为require
,因为这是您要执行的代码;它不是模块定义。
这当然也是前面提到的缺失的GlobalRouter
依赖。