2012-07-02 14 views
22

Sto lavorando a un'app NodeJS (è un gioco). In questo caso, ho impostato un codice in modo che quando una persona visita l'indice e scelga una stanza, venga reindirizzato nella stanza appropriata.Accesso alla variabile EJS nella logica Javascript

In questo momento è stato fatto in questo modo, con espresso v2.5.8:

server.get("/room/:name/:roomId, function (req, res) { 
    game = ~databaseLookup~ 
    res.render("board", { gameState : game.gameState }); 
} 

corso in board.ejs posso accedere alla modalità gamestate con codice come questo:

<% if (gameState) { %> 
    <h2>I have a game state!</h2> 
<% } %> 

C'è un modo per me di importare questo nella mia logica JavaScript? Voglio essere in grado di fare qualcosa come var gs = ~ import ejs gameState ~

e quindi essere in grado di fare quello che voglio con esso - accedere alle sue variabili, stamparlo per console per la verifica. Alla fine, ciò che voglio fare con questo GameState è di visualizzare correttamente la scheda, e per farlo dovrò fare cose come accedere alle posizioni dei pezzi e quindi visualizzarli correttamente sullo schermo.

Grazie!

risposta

32

È possibile inserire direttamente la variabile gameState in javascript nella pagina.

<% if (gameState) { %> 
    <h2>I have a game state!</h2> 
    <script> 
     var clientGameState = <%= gameState %>    
    </script> 
<% } %> 

Un'altra opzione potrebbe essere quella di effettuare una chiamata AJAX al server una volta che la pagina è già caricato, restituire il gamestate JSON, e impostare clientGameState alla risposta JSON.

Forse potresti essere interessato a questo: How can I share code between Node.js and the browser?

+1

ho deciso di roll con la chiamata AJAX una volta che la pagina è già caricato. Il problema con il tuo codice sopra è che <% = gameState%> valuta [oggetto oggetto] che non è affatto quello che voglio. Grazie! –

+0

Io uso <% include script%> nella parte inferiore di tutte le mie pagine che contiene alcuni elementi standard, come oggetto richiesta, oggetto utente, errori di modulo. – chovy

+8

se il codice valuta [oggetto oggetto], suggerisco di usare 'JSON.stringify (game.gameState)' lato server. Quindi l'oggetto stringa verrà inserito nel tag dello script. Poiché il rendering di ejs evita di solito caratteri speciali per HTML, ti consigliamo di utilizzare 'var clientGameState = <% - gameState%>' all'interno del tag script (invece di '<% =') Se hai bisogno del gameState per il rendering anche la pagina, puoi fare un JSON.parse() per passarci sopra ecc. – Matthias

4

sento che la logica sottostante è meglio e ha funzionato per me.

Assumendo che la variabile passata alla pagina ejs sia uid, è possibile avere il contenuto del tag div o un tag h con la variabile passata. È possibile accedere ai contenuti del tag div o h nello script e assegnarlo a una variabile.

codice di esempio riportato di seguito: (in EJS)

<script type="text/javascript"> 
    $(document).ready(function() { 
     var x = $("#uid").html(); 
     alert(x); // now JS variable 'x' has the uid that's passed from the node backend. 
    }); 
</script> 

<h2 style="display:none;" id="uid"><%=uid %></h2> 
+0

con il codice sopra, è possibile vedere facilmente l'intero oggetto UID quando si visualizza la fonte. Questo non è l'approccio giusto anche se funziona – vardha

Problemi correlati