Meteor.js:<script>标记在<body> </script>中不起作用

时间:2012-08-28 08:05:12

标签: javascript meteor

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/ 你有警报箱吗?

5 个答案:

答案 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中放置一个脚本标记。此脚本标记将无法运行。