【发布时间】:2021-05-09 16:58:19
【问题描述】:
我正在构建单页应用程序 (SPA),但在处理 SPA 不同部分的 JavaScript 文件时遇到了困难。
在我的 SPA 中,我使用 jQuery 的 .html() 方法动态加载页面。我遇到的问题是某些页面需要多个相互依赖的 JavaScript 文件和页面,因此一旦页面被提取并插入到 DOM 中,我必须按顺序导入它们。澄清一下,我所说的依赖于页面的 JS 文件是指它们包含的代码,例如通过 Id 选择元素,使它们与页面绑定。
为了按顺序导入这些脚本,我使用了 defer 属性,如下所示:
file.html
<!-- Contents of this file that will be dynamically loaded into the SPA -->
<script defer src="/js/script_1.js"></script>
<script defer src="/js/script_2.js"></script>
<script defer src="/js/script_3.js"></script>
<script defer src="/js/script_4.js"></script>
<script defer src="/js/script_5.js"></script>
index.js(这是我原始脚本的精简版,显然包括缓存、错误处理等)
$.ajax({
type: 'GET',
url: '/file.html',
success: function (data) {
$('#main-container').html(data);
}
});
file.html 文件已成功插入 DOM,但似乎没有获取任何 JavaScript 文件。事实上,<script></script> 标签内似乎没有任何内容被执行。
我尝试将每个 JavaScript 文件包装在一个函数中,并在 file.html 中以正确的顺序调用它们,但这也不起作用。
我应该如何解决这个问题?我应该重新评估我的设计吗?
【问题讨论】:
-
与这个特定问题无关——我会重新考虑你的设计。单独加载任意数量的 JS 文件可能没什么好处
-
@Dave Newton 是的,这是真的。但是,我喜欢保持我的代码干净并组织成不同的组件和文件。此外,包含一个大文件只能解决一半的问题。
-
代码在开发过程中的存在方式与其交付给客户端的方式是正交的。
-
@Dave Newton - 我同意;然而,最重要的是,加载依赖于动态加载页面的 JavaScript 文件的问题仍然存在。
-
如果你交付了一个 JS 文件,只重新渲染内容 DOM,并且绑定页面代码运行到它的加载事件,没有问题。也就是说,重新发明 SPA 框架也可能比它的价值更麻烦。 YMMV。
标签: javascript jquery single-page-application