0

我正在使用 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 

现在,我看到了由Marionette的作者编写的“ backbone.wreqr是用于分离 Backbone 和 Backbone.Marionette 应用程序模块和组件的基础设施” 。另外backbone.eventbinderbackbone.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 应用程序中的错误?

4

3 回答 3

2

Marionette 需要这些文件才能正常工作,但作者将它们与 Marionette 分离,因此它们也可以用于其他项目。

我建议您下载 Marionette 的捆绑版本,其中包含所有需要的依赖文件:

http://marionettejs.com/#download

于 2013-01-17T08:17:49.780 回答
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'
    }
});

这发生在您的应用程序的主要 require() 调用之前。

于 2013-02-12T23:04:19.583 回答
1

RequireJS 假设你所有的脚本都与你的main.js文件位于同一个基目录中。

如果要指定不同的基目录,请使用baseUrl配置选项:

<!-- In main.js -->
require.config({
    baseUrl: "/another/path"
});
于 2013-01-17T04:01:43.977 回答