Meteor有条件地加载外部脚本

时间:2013-06-03 12:03:04

标签: meteor

我正在尝试创建一个多页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错误,我不知道这意味着什么:

enter image description here

我猜这是因为Meteor还在scriptInsert()加载了JQuery,我听说Meteor最后加载了所有内容,所以也许在JQuery实例之前加载了JQuery插件缓动。 但我不知道。

在Meteor的多页应用程序中为不同页面加载不同脚本的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

你的代码多次加载脚本 - 每次渲染模板时(即使对于简单的页面,这几乎总是发生很多次) - 你一遍又一遍地注入相同的代码,这可能导致错误


我不确定我会参与这个模式 - 基于meteor如何工作,即使使用meteor-router的多页应用程序(页面永远不会重新加载)你应该只在你的app目录中包含你的javascript文件并拥有它们已经通过1个合并和缩小的javascript文件加载 - 您可能需要将文件放在client/compatibility目录中以避免任何作用域问题,请参阅https://github.com/meteor/meteor/blob/master/History.md

如果您的文件确实已经在您的应用程序目录中,它们已经加载,根本不需要 - 默认情况下,meteor将加载并向除server或{{1之外的任何目录中的浏览器提供所有内容}}


如果您正在加载外部脚本,这可能会更有意义,在这种情况下,您应该使用路由器过滤器来实现此目的

tests

将根据需要加载脚本并保持加载 - 您只想加载一次,而不是每次加载页面或更糟糕的渲染

以这种方式加载脚本可能仍有问题 - 如果页面在加载脚本之前最后一次呈现它可能无法正常工作 - 最好的办法是立即包含所有需要的文件