2012-08-28 63 views
7

正文標記內的簡單腳本標記似乎不起作用。警報沒有在下面的代碼中觸發:Meteor.js:<script>標記不起作用<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頁面,警報將工作。

編輯3:我在這裏部署這個應用程序:http://alert-in-body-test.meteor.com/ 你有一個警告框?

回答

0

它應該工作。

我剛剛在我的一個項目中粘貼了它,它工作。

您的{{> main}}對我來說很難過。還請確保<body>位於<html>標記內。

+0

工作 「另外,還要確保裏面標籤」。 這不是流星模板的工作方式,實際上在普通html中實際上是可選的。 – Noishe

0

流星被渲染你的頁面爲模板構建從Javascript整個DOM - 「源」爲您的網頁瀏覽器所看到的基本上是:

<script type="text/javascript" src="/5a8a37bef5095c69bcd3844caf3532e1ba6d49bf.js"></script> 

我無法找到一個明確的頁面聲明將腳本標籤嵌入到這樣的模板中並不會導致它被執行,但它肯定會違背框架試圖實現的精神。

如果要實現標記和邏輯的完全分離,那麼爲什麼要把它放在模板中。更好的解決方案是使用meteor.startup調用

3

這個問題在當前版本的Meteor(版本0.5.4)中仍然相關,所以我想描述如何在腳本的尾部包含腳本。

要在身體的末端執行JavaScript的,註冊一個把手幫手,並把相關的代碼出現,就像這樣:

在client.html:

<body> 
    {{renderPage}} 

    {{afterBody}} 
</body> 

...

在client.js:

if (typeof Handlebars !== 'undefined') { 
    Handlebars.registerHelper('afterBody', function(name, options) { 
    $('body').append('AFTER BODY'); 
    }); 
} 

(爲什麼這是必需的一個偉大的描述,SE e Rahul在這裏的回答類似的問題:https://stackoverflow.com/a/14002991/219238

+0

這是一個非常天才的解決方案。 +1 – KJW

+1

你是否把javascript寫入了'AFTER BODY' – KJW

+0

謝謝Jong Woo!你的javascript會進入匿名函數,取代$('body')。append()代碼。 – alanning

0

而不是在開發人員工具查看呈現的html,請嘗試查找真正的下載的html。 你會發現一個(可能)空標籤,裏面有大量的腳本標籤。

換句話說,流星應用程序的主體不是最終html的主體,它只是您的主要模板。

相反,Meteor發佈的這個腳本將加載您的模板。 所以,你的代碼不會運行,因爲它已經放置在那裏。這就像你操縱DOM(用jQuery,例如),在加載後在DOM中放置一個腳本標記。此腳本標記不會運行。

1

它在OnRender將調用這個jQuery

$ .getScript( '你的URL')