【问题标题】:Requirejs: module loading timeoutRequirejs:模块加载超时
【发布时间】:2012-09-09 05:46:07
【问题描述】:

实际上,我在 Requirejs 和 Backbone 方面遇到了一个恼人的问题。 我正在两条不同的路径上开发我的应用程序:

  1. 主要访问,例如:/App/index.php#list
  2. 子访问,例如:/App/index.php/clone#list

当我需要使用 require([module]) 方法加载模块时出现问题。

如果我使用绝对路径,比如require(['/App/js/views/modal.js']),我只会得到这个错误:

错误:模块加载超时:/App/js/views/modal.js

http://requirejs.org/docs/errors.html#timeout

如果我使用相对方式,例如在我的主要访问权限上使用require(['js/views/modal.js']),在我的子访问权限上使用require(['../js/views/modal.js']),一切都会按预期工作。

我正在使用绝对路径加载其他模块并且它们可以工作,如果我复制模块并使用不同的名称要求它可以工作,我认为唯一的区别是我需要的模块已经确定另一个模块,所以它已经被加载了,像这样:

主模块

require('/App/js/views/row.js'], function(Row){
     Somecode...
});

....

require('/App/js/views/modal.js'], function(Modal){
     Othercode...
});

行模块

define([
'backbone',
'text!templates/row.html',
'views/modal', //the same view callend in my main file!
], function(Backbone, rowTemplate, Modal){
    Viewcode...
});

模态模块

define([
'backbone',
'text!templates/modal.html',
'models/user_model',
], function(Backbone, modalTemplate, Model){
    Viewcode...
});

也许我遗漏了一些东西,但我不明白这背后的逻辑,为什么不使用绝对地址?

【问题讨论】:

    标签: backbone.js requirejs


    【解决方案1】:

    您不需要将.js 附加到require.js 中文件名的末尾,我自己也看到了这样做的奇怪行为。此外,我建议您在应用程序的各个模块中使用相对路径,因为这样可以更直接地将应用程序的模块/组件拖放到另一个应用程序中。

    【讨论】:

    • 感谢您的建议,我已经通过一些解决方法“修复”了这个问题,使主访问看起来与辅助访问相同 (/App/index.php/main#list),所以我可以只使用相对路径。
    • 所以这是pathsbaseUrl 配置参数中的错误配置?然后请标记正确答案或创建您自己的答案并标记它。只是不要让这个问题像这样悬而未决。