如何确保顺序加载coffeescript?

时间:2012-07-31 20:31:58

标签: javascript jquery coffeescript

我在同一个文件夹中有两个coffeescript文件,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?

1 个答案:

答案 0 :(得分: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中的“主要”功能,如果这对你有意义的话。在其中,有这个构造(当然编译为js):

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

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

还有其他方法可以做到这一点,你可能会困惑的是Javascript AMD(异步模块定义)的概念,你可以在其中一个库上阅读更多关于它的内容(RequireJS - {{3} })。但是我的建议是在尝试使用AMD(带工具)之前掌握上面描述的基础知识。