我正在使用require.js和AMD编写Marionette应用程序。
我将Jsoverson版本的Addy Osmany ToDoMVC作为代码示例。即使没有太多关于此版本的文档,我也会根据自己的需要进行调整。
每当我加载页面时,我都会在浏览器控制台中收到404错误:
GET http://127.0.0.1:8000/static/js/backbone.wreqr.js 404 (NOT FOUND) require.js:1836
Uncaught Error: Script error
http://requirejs.org/docs/errors.html#scripterror require.js:160
GET http://127.0.0.1:8000/static/js/backbone.eventbinder.js 404 (NOT FOUND) require.js:1836
GET http://127.0.0.1:8000/static/js/backbone.babysitter.js 404 (NOT FOUND) require.js:1836
Uncaught Error: Script error
http://requirejs.org/docs/errors.html#scripterror
现在,我已经看到backbone.wreqr“是一个基础设施,用于解决Backbone和Backbone.Marionette应用程序模块和组件”由Marionette的author编写。此外,backbone.eventbinder和backbone.babysitter是作者撰写的项目。
1)我不明白我为什么要包含这些文件,考虑到我所遵循的代码示例没有使用它们中的任何一个并且它工作得很好。
2)无论如何,这些文件都需要在错误的路径中。我的应用程序以这种方式组织:
Staticfiles/
|__js/
| app.js
| main.js
| models/
| ectr.
|__lib/
backbone/
Backbone.js
Marionette.js (AMD version)
Underscore.js
ectr.
那么为什么要在js/
文件夹下查找这些文件呢?
3)它是一个Require.js问题还是我的js应用程序中的一个错误?
答案 0 :(得分:2)
Marionette需要这些文件才能正常工作,但作者将它们与Marionette分离,以便它们也能用于其他项目。
我建议你下载包含所有必需依赖文件的捆绑版Marionette:
答案 1 :(得分:2)
如果你想坚持依赖版本的Marionette(例如,你像我一样使用JamJS),你可以将它们包含在你的main.js配置中。例如,这是我的:
require.config({
paths: {
marionette: 'lib/Backbone.Marionette/lib/core/amd/backbone.marionette',
'backbone.babysitter': 'lib/Backbone.BabySitter/lib/amd/backbone.babysitter',
'backbone.wreqr': 'lib/Backbone.Wreqr/lib/amd/backbone.wreqr'
}
});
这是在你的app的主要require()调用之前。
答案 2 :(得分:1)
RequireJS假定您的所有脚本都与main.js
文件位于同一个基本目录中。
如果要指定其他基本目录,请使用baseUrl
配置选项:
<!-- In main.js -->
require.config({
baseUrl: "/another/path"
});