0

我尝试使用 RequireJS 加载 JS 文件,但是十字路口http://millermedeiros.github.io/crossroads.js/ 似乎没有正确加载。我已经使用 Chrome 开发工具栏进行了检查,并且所有 JS 文件都已实际加载。但是运行window.crossroad让我返回undefined

以下是我的requirejs config..请指教...谢谢!

索引.html

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

配置.js

require.config({
  shim: {
    "zepto.min": {
      exports: "$"
    },
    "underscore.min": {
      exports: "_"
    },
    "crossroads.min": {
      exports: "crossroads"
    }  }
});

require(["zepto.min","underscore.min", "crossroads.min",], function() {
    console.log("=> Loading app")
    require(["main"]);
});

main.js

require(["hp-config", "hp-model", "hp-view", "hp-controller"], function () {
    console.log("=> Init");
    console.log(window.crossroads);
    //$(document).ready( function(){ HP.C.init(); });
});
4

1 回答 1

0

如果您查看交叉路口的代码,您会看到它检测到它处于 AMD 环境(RequireJS 是)中并define自行调用。所以你应该删除你有它的垫片。基本规则是:不调用的库define需要 shim,而调用的库define不需要。未定义的原因window.crossroads是 crossroads 调用define 而不是window在全局空间 (on )中导出自身。

鉴于require.config您当前的通话,更新后的通话将是:

require.config({
  shim: {
    "zepto.min": {
      exports: "$"
    },
    "underscore.min": {
      exports: "_"
    }
  }
});

上述配置是所需的最小更改。但是,我也建议不要.min在传递给的名称中使用requireor define。所以你config.js可以改为:

require.config({
  paths: {
    zepto: "zepto.min",
    underscore: "underscore.min",
    crossroads: "crossroads.min"
  },
  shim: {
    zepto: {
      exports: "$"
    },
    underscore: {
      exports: "_"
    }
  }
});

require(["zepto","underscore", "crossroads",], function() {
    console.log("=> Loading app")
    require(["main"]);
});

这样,如果您想切换到非缩小版本(用于调试),您只需更改paths设置,而不必去任何需要这些模块并更改名称的地方。

于 2014-02-27T11:18:48.200 回答