【问题标题】:curious dependency loading behaviour in requirejsrequirejs中奇怪的依赖加载行为
【发布时间】:2012-11-14 17:48:49
【问题描述】:

我在 requirejs 中加载依赖项时遇到问题,因此尝试重新创建最简单的结构来显示我的问题。 html 文件包含一个引导输入框,我想在页面加载后填充数据。如果我的 main.js 脚本是:

requirejs.config({
  paths: {
    jquery: 'libs/jquery/jquery-min',
    bootstrap: 'libs/bootstrap/bootstrap.min',
    underscore: 'libs/underscore/underscore-min',
    backbone: 'libs/backbone/backbone-optamd3-min',
    cs: 'libs/require/cs',
    'coffee-script': 'libs/coffeescript/coffee-script'
  },
  shim: {
    bootstrap: {
      deps: ['jquery']
  }
});

require(['cs!router']);

我的主干入口点是一个非常简单的路由器:

define ['jquery','underscore','backbone','bootstrap'], ($, _, Backbone) ->

  AppRouter = Backbone.Router.extend

    initialize: () ->
      @data = ['one','two','three']

    routes: '': 'index'

    index: () ->
      $('.typeahead').typeahead({source:@data})

  app_router = new AppRouter
  Backbone.history.start()

如果页面从清理的网络缓存加载,我会在控制台上收到以下错误:

TypeError:a 不是函数

TypeError: $(".typeahead").typeahead 不是函数

错误:模块加载超时:cs!router http://requirejs.org/docs/errors.html#timeout

如果我只是重新加载页面,所有错误都会消失,一切正常。如果有人能向我解释这里发生了什么,我将非常感激,谢谢。

【问题讨论】:

  • 我相信你的主脚本中的define应该是require
  • 对不起,我的意思是 require(['cs!app']);在配置内容之后,我的主应用脚本开始:define ['jquery',...,'bootstrap'] ...
  • 我不知道它是否相关,但你不需要exports: 'bootstrap'。见:blog.credera.com/topic/technology-solutions/java/…
  • 没有影响主要问题...我正在重新编辑帖子以使我的结构更清晰。

标签: requirejs


【解决方案1】:

好的,通过使用修复

<script data-main="js/main" src="js/libs/require/require-jquery.js"></script>

而不是

<script data-main="js/main" src="js/libs/require/require.js"></script>

在主 html 文件中。

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多