2012-08-28 12 views
7

Un tag di script semplice all'interno del tag body non sembra funzionare. L'avviso non viene attivato nel codice riportato di seguito:Meteor.js: <script> tag non funziona all'interno <body>

<body> 
    <script type="text/javascript"> 
     alert('Hello'); 
    </script> 

     {{>main}} 

</body> 

Qualche idea sul perché?

Edit: Appena provato con una meteora app fresco, nessuna modifica avviso ancora:

<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> 

cosa strana è quando copio incollare la fonte del HTML, ha fatto una nuova pagina html, e l'avviso funzionerà.

Edit3: ho distribuito questa app qui: http://alert-in-body-test.meteor.com/ Ricevi una finestra di avviso?

risposta

0

Dovrebbe funzionare.

Ho appena incollato questo all'interno di uno dei miei progetti e ha funzionato.

Il tuo {{> main}} è strano per me difficile. Assicurati inoltre che <body> sia all'interno del tag <html>.

+0

"Assicurarsi inoltre che è dentro tag". Non è così che funzionano i modelli di meteore e in effetti è facoltativo in html normale. – Noishe

0

Meteor sta costruendo l'intera DOM da JavaScript rendendo la pagina come modello - la 'fonte' per la tua pagina come si è visto dal browser è fondamentalmente:

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

non riesco a trovare una definitiva la pagina afferma che incorporare un tag script in un modello come questo non causa l'esecuzione, ma si sente decisamente contrario allo spirito di ciò che il framework sta cercando di ottenere.

Se il punto è quello di ottenere una separazione netta dal codice e dalla logica, allora perché metterlo nel modello. Una soluzione migliore sarebbe utilizzare la chiamata meteor.startup

3

Questa domanda è ancora pertinente nella versione corrente di Meteor (versione 0.5.4), quindi volevo descrivere come includere lo script alla fine del corpo.

Per eseguire javascript alla fine del corpo, registrare un aiutante Manubrio e mettere il relativo codice lì, in questo modo:

In client.html:

<body> 
    {{renderPage}} 

    {{afterBody}} 
</body> 

...

In Client.js:

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

(Per una grande descrizione del perché questo è richiesto, se La risposta di Rahul a una domanda simile qui: https://stackoverflow.com/a/14002991/219238)

+0

questa è una soluzione piuttosto geniale. +1 – KJW

+1

metti javascript in 'DOPO IL CORPO' – KJW

+0

Grazie Jong Woo! Il tuo javascript andrebbe all'interno della funzione anonima, sostituendo il codice $ ('body'). Append(). – alanning

0

Invece di guardare l'html reso agli strumenti di sviluppo, prova a cercare il vero html scaricato. Troverai un tag (probabilmente) vuoto, con tonnellate di tag di script all'interno del.

In altre parole, il corpo dell'applicazione Meteor non è il corpo dell'html finale, è solo il modello principale.

Invece, questa tonnellata sugli script spediti da Meteor, caricherà i tuoi modelli. Quindi, il tuo codice non verrà eseguito, perché è stato collocato lì. È come quando manipoli DOM (con jQuery, ad esempio), ponendo un tag script in DOM, dopo che è stato caricato. Questo tag script non verrà eseguito.

1

Il suo lavoro per me

in OnRender chiamano questo jquery

$ .getScript ('tuo url')

Problemi correlati