backbone.js 模块的RequireJS和文本插件加载超时

j5fpnvbx  于 2022-11-10  发布在  其他
关注(0)|答案(5)|浏览(154)

我在使用RequireJS文本插件时遇到了一些问题。这可能是一个与路径相关的问题(或者类似的明显问题),但我无法解决它,因为无论是chrome控制台(xhr打开)还是firebug都没有给我任何信息,除了

Uncaught Error: Load timeout for modules: text 
http://requirejs.org/docs/errors.html#timeout

我很肯定路径是好的,但我找不到任何其他解释。有人知道如何调试这个吗?
我在服务器端使用node.js和express,在客户端使用backbone和jQuery,所有这些都可以用RequireJS正确加载。

g6baxovj

g6baxovj1#

我猜这是路径问题。我有相同的设置(node/express和backbone),它似乎对我有效。下面是我的main.js文件:

require.config({
  paths: {
    jquery: 'libs/jquery-1.7.1.min',
    underscore: 'libs/underscore',
    backbone: 'libs/backbone',
    text: 'libs/text',
    templates: '../views',
    persist: 'libs/persist/persist'
  }
});
require([
  'app'
], function(App){
  App.initialize();
});

下面是我如何从模块中调用插件:

define([
  'jquery',
  'underscore',
  'backbone',
  'collections/sub_elements',
  'collections/elements',
  'views/element',
  'text!../../../views/partials/_elements.html'
], function($, _, Backbone, sub_elementsCollection, collection, view,     template){

  var elementsView = Backbone.View.extend({
    // ... //
  });

  return elementsView;
});
kpbpu008

kpbpu0082#

因为它在你的windows手机上,尝试将“waitSeconds”设置为一个更大的数字。
移动的速度很慢,但默认情况下require.js会在7秒后超时,这对于移动体验/或互联网访问速度慢的用户来说通常太低了。
文档:http://requirejs.org/docs/api.html#config-waitSeconds

ldioqlga

ldioqlga3#

我最初的答案
I answered a similar question here指向正式的require.js疑难解答页面。

在我的情况下,这个错误只发生在开发者控制台打开时在一个单一的macbook上的几个chrome版本的chrome。其他设备没有显示这个问题。因此,我是确定的,改变配置的单一计算机。

等待秒数

waitSeconds选项可以配置为无限大(0)或任何所需的值(以秒为单位)。默认值为7秒。示例配置:

<script src="scripts/require.js"></script>
<script>
  require.config({
    baseUrl: "/another/path",
    paths: {
      "some": "some/v1.0"
    },
    waitSeconds: 0
  });
  require( ["some/module", "my/module", "a.js", "b.js"],
    function(someModule,    myModule) {
      //This function will be called when all the dependencies
      //listed above are loaded. Note that this function could
      //be called before the page is loaded.
      //This callback is optional.
    }
  );
</script>

**由于infinite(0)禁用了超时,因此我不建议在生产代码中使用此选项!**如果您在任何地方运行代码时遇到此问题,或者禁用超时没有帮助,请继续阅读。

此问题的3个常见原因

  • 正在加载的模块中的错误
  • 配置中的路径错误(检查pathsbaseUrl选项)
  • 配置中的双重条目
  • 有关此主题的更多信息,请查看顶部链接的原始答案。*
bsxbgnwa

bsxbgnwa4#

当我错误地使用sugar语法时,我得到了这个错误。你不能同时定义依赖关系和使用require工厂函数。

//THIS WILL FAIL
define(['require'], function (require) {
    var namedModule = require('name');
});

从文档中:
这会失败,因为requirejs需要确保在调用上面的工厂函数之前加载并执行所有依赖项。如果给define()一个依赖项数组,那么requirejs假设所有依赖项都列在该数组中,并且它不会扫描工厂函数中的其他依赖项。因此,要么不要传入依赖项数组,要么如果使用依赖项数组,则列出其中的所有依赖项。
因此,如果你指定了一个依赖数组,你就不能依赖sugar语法来工作了。在我看来这并不理想,但这就是创建requirejs的方式。

46scxncf

46scxncf5#

Require.js请求我的text.js文件,但是响应是302-我的用户没有通过身份验证。因此,text插件无法加载。因此,我的所有文本资源都无法加载:text!any/name.html .
我的控制台给了我一个相关的消息,另一个提示,我的text插件无法加载:
无法读取未定义的属性'normalize'

相关问题