body标签内的简单脚本标签似乎不起作用。警报不会在以下代码中触发:
<body>
<script type="text/javascript">
alert('Hello');
</script>
{{>main}}
</body>
知道为什么吗?
编辑: 只是尝试了一个新的流星应用程序,仍然没有警报标签:
<head>
<title>test</title>
</head>
<body>
<script type="text/javascript">
alert('Hello');
</script>
{{> hello}}
</body>
<template name="hello">
<h1>Hello World!</h1>
{{greeting}}
<input type="button" value="Click" />
</template>
奇怪的是当我复制粘贴html的源代码时,创建了一个新的html页面,并且警报将起作用。
Edit3:我在此处部署了此应用:http://alert-in-body-test.meteor.com/ 你有警报箱吗?
答案 0 :(得分:3)
这个问题在当前版本的Meteor(版本0.5.4)中仍然有用,所以我想描述如何在正文末尾包含脚本。
要在正文末尾执行javascript,请注册Handlebars帮助程序并将相关代码放在那里,如下所示:
在client.html中:
<body>
{{renderPage}}
{{afterBody}}
</body>
...
在client.js中:
if (typeof Handlebars !== 'undefined') {
Handlebars.registerHelper('afterBody', function(name, options) {
$('body').append('AFTER BODY');
});
}
(有关为何需要这样做的详细说明,请参阅Rahul在此处对类似问题的回答:https://stackoverflow.com/a/14002991/219238)
答案 1 :(得分:1)
它为我工作
onrender中的调用此jquery
$。getScript(&#39;你的网址&#39;)
答案 2 :(得分:0)
它应该有用。
我刚刚将其粘贴到我的一个项目中并且有效。
你的{{&gt; main}}对我来说很难受。另外,请确保<body>
位于<html>
标记内。
答案 3 :(得分:0)
Meteor正在通过将您的页面呈现为模板来构建整个DOM:浏览器看到的页面的“来源”基本上是:
<script type="text/javascript" src="/5a8a37bef5095c69bcd3844caf3532e1ba6d49bf.js"></script>
我找不到一个明确的页面,说明在这样的模板中嵌入脚本标记不会导致它被执行,但它肯定会违背框架试图实现的精神。
如果要实现标记和逻辑的清晰分离,那么为什么要将它放在模板中。更好的解决方案是使用meteor.startup调用
答案 4 :(得分:0)
不要在开发者工具中查看渲染的html,而是尝试查看真正下载的html。 你会发现一个(可能)空标签,里面有大量的脚本标签。
换句话说,你的流星应用程序的主体不是最终html的主体,它只是你的主要模板。
相反,Meteor发布的脚本将加载您的模板。 因此,您的代码将无法运行,因为它已被放置在那里。这就像你操纵DOM(用jQuery,例如),在加载后在DOM中放置一个脚本标记。此脚本标记将无法运行。