gpt4 book ai didi

Coffeescript、Backbone 和加载顺序

转载 作者:行者123 更新时间:2023-12-04 04:23:25 24 4
gpt4 key购买 nike

考虑这个 Coffeescript 类,在一个应用程序中,每个类都在自己的文件中。

class Manager extends Person
title: titles["manager"]

如果该文件在“标题”对象之前加载,则会产生错误。我假设这是因为 Coffeescripts 安全包装器在首次加载此文件时执行“.call(this)”?

否则,如果我要延迟运行任何代码直到整个页面完全加载($(document.ready())),我可以确定所有 javascript 文件在任何代码实际运行之前都已完全加载。

这不会造成一些烦人的加载顺序问题,还是我没有做正确的事情?

最佳答案

它不能既是订单问题又是包装问题。用立即运行的函数包装某些东西不会影响顺序,只会影响范围。

如果titles在另一个文件中定义,然后是 class Manager 的范围没关系。所以,这是一个顺序问题。 titles如何定义?

if I were to delay running any code until after the entire page had fully loaded ($(document.ready()), I could be sure that all the javascript files were fully loaded before any code actually ran.

不完全是。 $(document).ready() (注意括号——没有 document.ready 函数...)延迟函数的执行,直到页面的所有 HTML 都已加载,这并不意味着所有 JavaScript 都已加载。好消息是:从 JavaScript 代码的角度来看,是否加载了其他 JavaScript 文件并不重要,因为它们都是按顺序运行的。 (注意:我在这里假设您没有做任何花哨的事情,比如从您的 JavaScript 代码中添加额外的 <script> 标签。)所以只要您有

<script src="titles.js"></script>
<script src="Manager.js"></script>

您可以放心Manager.js只会在 titles.js 之后运行有。

警告!依赖$(document).ready()订购 JS 代码是一个常见的错误,会导致混淆!如果您的 HTML 看起来像这样

<script src="Manager.js"></script>
<script src="titles.js"></script>

哪里titles.js创建一个名为 titles 的全局和 Manager.js看起来像这样

$(document).ready ->
console.log titles

那么输出有时会是titles ,并且有时undefined .为什么?因为作为the docs说,

If .ready() is called after the DOM has been initialized, the new handler passed in will be executed immediately.

并且当第一个 JS 文件运行时,DOM 可能已经被初始化了! (实际上,如果浏览器缓存了页面的 HTML,则往往会发生这种情况。)

所以,保持简单。只需以正确的顺序加载您的脚本。请记住,出于所有实际目的,浏览器会按顺序将您的脚本串联到一个 JS 文件中。

关于Coffeescript、Backbone 和加载顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7329818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com