添加模块会导致额外的http请求

时间:2013-04-10 15:55:39

标签: backbone.js requirejs

在路由器文件中添加Backstack作为测试应用程序的模块时,会抛出错误404 loading backbone.js

我无法弄清楚原因是什么,但是添加了额外的http get,请求js / Backbone.js然后抛出404,因为我在js / libs文件夹中只有我的lib。

可能是什么问题?

// index.html
<!DOCTYPE html>
<html>
<head>
<title>Starting Require</title>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"/>
<script data-main="js/main" src="js/libs/require.js"></script>
</head>
<body>
<div id="content">
</div>
</body>



// main.js
requirejs.config({
paths : {
  'jquery' : 'libs/jquery-1.8.2.min',
  'underscore' : 'libs/underscore',
  'backbone' : 'libs/backbone',
  'backstack' : 'https://github.com/pwalczyszyn/backstack/blob/master/backstack'
},
shim: {
    'backbone': {
        deps: ['underscore', 'jquery'],
        exports: 'Backbone'
    },
    'backstack': {
        deps: ['backbone', 'underscore', 'jquery'],
    },
    'underscore': {
        exports: '_'
    }
}
});
require([
  'app',
    ], function(App){
  App.initialize();
});


// app.js
define([
'jquery', 
'underscore', 
'backbone',
'router'
], function($, _, Backbone, Router){
var initialize = function(){
Router.initialize();
};
return { 
initialize: initialize
};
});




// router.js
define([
'jquery',
'underscore',
'backbone',
'backstack'
], function($, _, Backbone, Backstack) {

var AppRouter = Backbone.Router.extend({
routes: {
  '': 'welcome'
}
});

var initialize = function(){
var app_router = new AppRouter;
app_router.on('route:welcome', function(){
    $('#content').html('Hello World!');
});
  };
  return { 
    initialize: initialize
  };
});

1 个答案:

答案 0 :(得分:1)

backstack uses the Backbone module name,而不是backbone

这个小提琴仅使用大写的Backbone模块名称,并且没有额外的模块加载。

http://jsfiddle.net/MUSBk/

否则您可以定义别名(如果放在名为Backbone.js的文件中,则省略模块名称) - http://jsfiddle.net/3UXGZ/1/

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

我不确定您是否可以使用path配置将新Backbone模块指向现有的Backbone JS,因为这可能会加载与Backbone的第二个实例相同的文件,这可能会导致问题。