我正在使用RESTHub 2.0 Backbone Stack
以下是我的route.js
define(function (require) {
'use strict';
var $ = require('jquery');
var Backbone = require('backbone');
var HomeView = require('../views/home');
var _pageView;
var AppRouter = Backbone.Router.extend({
initialize: function() {
console.log("Router initialize");
Backbone.history.start({ pushState: false, root: "/" });
_pageView = new HomeView();
},
routes: {
'': 'main',
'test': 'test'
},
main: function() {
console.log("Main route activated");
require(['views/home'], function(HomeView) {
_pageView.render(HomeView);
});
},
test: function() {
console.log("Test route activated");
alert("test");
}
});
return AppRouter;
});
浏览器控制台正在给我以下错误
Error: Module name "../views/home" has not been loaded yet for context: _
http://requirejs.org/docs/errors.html#notloaded
为什么会触发此错误?
我知道,这会失败,因为在调用上面的工厂函数之前,requirejs需要确保加载并执行所有依赖项。如果为define()提供了依赖关系数组,那么requirejs假定所有依赖关系都列在该数组中,并且它不会扫描工厂函数以获取其他依赖关系。所以,要么不传入依赖数组。
但仍然没有工作!
答案 0 :(得分:3)
在link given by the error中,它说:
//THIS WILL FAIL
define(['require'], function (require) {
var namedModule = require('name');
});
我认为您需要依赖数组中的模块:
define(['require', '../views/home'], function (require) {
var namedModule = require('../views/home');
});
或者,您可以将所有模块添加到该依赖项列表中,然后使用回调函数的参数:
define(['jquery', 'underscore', 'backbone', '../views/home'], function ($, _, Backbone, HomeView) {
// now you dont need to use require(name) at all.
});