0

我在同一个文件夹中有两个咖啡脚本文件 A 和 B。我希望 A 执行到某个点,然后运行 ​​B,然后继续执行。换句话说,我想要这个:

//in A
$("#content").html(@currentView.el)
require ['B']

//in B
if document.location.href.indexOf("showdiv") > 0
    $("#content").trigger('click')

但是,如果我将所有内容都放入 A,它可以正常工作:

//in A
$("#content").html(@currentView.el)

if document.location.href.indexOf("showdiv") > 0
    $("#content").trigger('click')

我怎样才能让第一个片段工作?require 关键字是否使编译的 javascript 并行加载?

4

1 回答 1

0

在浏览器中,您可以通过在 html 文件中拉取代码的方式来控制加载顺序。这是我的一个项目中的一个示例(在index.html结束body标记之前):

  <script src="vendor/jquery-1.7.2.min.js"></script>
  <script src="vendor/bs/js/bootstrap.min.js"></script>
  <script src="vendor/underscore-min.js"></script>
  <script src="vendor/backbone-min.js"></script>
  <script src="vendor/pouch.alpha.js"></script>
  <script src="vendor/backbone-pouchdb.js"></script>
  <script src="vendor/backbone-couchdb.js"></script>

  <script src="js/main.js"></script>

最后一个是开始的,类似于 C 中的“main”函数,如果这对你有意义的话。在其中,有这个构造(当然编译为 js):

$(document).ready ->
  # Initialization code goes here

初始化代码将包含原始帖子中的所有代码(减去浏览器中不存在的 require 调用),或者调用包含它的函数。您需要以上述方式延迟脚本执行的原因是延迟执行,直到所有代码都正确加载。

还有其他方法可以做到这一点,您可能会感到困惑的是 Javascript AMD(异步模块定义)的概念,您可以在其中一个库中阅读更多关于它的信息(RequireJS - http://requirejs.org)。但我的建议是在尝试让 AMD(使用工具)运行之前掌握上面描述的基础知识。

于 2012-07-31T21:05:41.440 回答