我正在尝试创建一个多页Meteor应用程序(我正在使用https://github.com/tmeasday/meteor-router)。如何根据页面内容有条件地加载javascripts?
这就是我正在做的事情:主页main.html
在<body>
标签中有一个{{renderPage}},这是Meteor-router所使用的。假设有一个名为home
的页面/模板,它是其中一个页面,它有一些脚本。如果不是Meteor,这些脚本中的一些脚本位于<header>
中,例如jquery,而其他脚本位于<body>
的末尾。我把部分放在名为home
的{{1}}模板的末尾,它有一个相应的Template.homeCustomScripts函数(我省略了许多脚本,这只是一个例子):
homeCustomScripts
在Template.homeCustomScripts.created = function() {
scriptInsert = function () {
$('head').append('<script type="text/javascript" src="js-plugin/respond/respond.min.js">`
<script type="text/javascript" src="js-plugin/easing/jquery.easing.1.3.js"></script>`
<script type="text/javascript" src="js/custom.js"></script>');
}
}
内我还有一个名为customScript的部分内容,我在main.html
次调用内Template.customScript.rendered
。
它应该可以工作,除了Chrome控制台上有一些非常混乱的Javascript错误,我不知道这意味着什么:
我猜这是因为Meteor还在scriptInsert()
加载了JQuery,我听说Meteor最后加载了所有内容,所以也许在JQuery实例之前加载了JQuery插件缓动。
但我不知道。
在Meteor的多页应用程序中为不同页面加载不同脚本的最佳方法是什么?
答案 0 :(得分:1)
你的代码多次加载脚本 - 每次渲染模板时(即使对于简单的页面,这几乎总是发生很多次) - 你一遍又一遍地注入相同的代码,这可能导致错误
我不确定我会参与这个模式 - 基于meteor如何工作,即使使用meteor-router的多页应用程序(页面永远不会重新加载)你应该只在你的app目录中包含你的javascript文件并拥有它们已经通过1个合并和缩小的javascript文件加载 - 您可能需要将文件放在client/compatibility
目录中以避免任何作用域问题,请参阅https://github.com/meteor/meteor/blob/master/History.md
如果您的文件确实已经在您的应用程序目录中,它们已经加载,根本不需要 - 默认情况下,meteor将加载并向除server
或{{1之外的任何目录中的浏览器提供所有内容}}
tests
将根据需要加载脚本并保持加载 - 您只想加载一次,而不是每次加载页面或更糟糕的渲染
以这种方式加载脚本可能仍有问题 - 如果页面在加载脚本之前最后一次呈现它可能无法正常工作 - 最好的办法是立即包含所有需要的文件