2012-07-02 10 views
22

में ईजेएस चर का उपयोग करना मैं एक नोडजेएस ऐप पर काम कर रहा हूं (यह एक गेम है)। इस मामले में, मेरे पास कुछ कोड स्थापित हैं जैसे कि जब कोई व्यक्ति इंडेक्स पर जाता है और कमरे चुनता है, तो उसे उचित कमरे में रीडायरेक्ट किया जाता है।जावास्क्रिप्ट तर्क

अभी यह एक्सप्रेस v2.5.8 के साथ, इस तरह से किया जा रहा है:

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

से अधिक मैं इस तरह कोड के साथ gameState ढंग पहुँच सकते हैं:

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

वहाँ है मेरे जावास्क्रिप्ट तर्क में इसे आयात करने का एक तरीका? मैं var gs = ~ import ejs gameState ~

और फिर जो कुछ भी मैं चाहता हूं उसे करने में सक्षम होना चाहता हूं - इसके चरों तक पहुंचने के लिए, इसे सत्यापन के लिए कंसोल पर प्रिंट करें। अंततः मैं इस गेमस्टेट के साथ क्या करना चाहता हूं बोर्ड को सही तरीके से प्रदर्शित करना है, और ऐसा करने के लिए मुझे टुकड़ों की स्थिति तक पहुंचने जैसी चीजों को करने की आवश्यकता होगी और फिर उन्हें स्क्रीन पर ठीक से प्रदर्शित करना होगा।

धन्यवाद!

उत्तर

32

आप पृष्ठ पर जावास्क्रिप्ट में सीधे गेमस्टेट चर को इंजेक्ट कर सकते हैं।

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

एक अन्य विकल्प एक AJAX कॉल सर्वर को वापस करने के लिए एक बार पेज पहले से ही लोड हो जाए, gameState JSON लौटने के लिए, और JSON जवाबी कार्रवाई के लिए clientGameState सेट हो सकता है।

आप भी इस में दिलचस्पी हो सकती: How can I share code between Node.js and the browser?

+1

मैं AJAX कॉल के साथ रोल के लिए एक बार पृष्ठ पहले ही लोड है तय कर लिया है। उपरोक्त आपके कोड के साथ समस्या यह है कि <% = gameState%> [ऑब्जेक्ट ऑब्जेक्ट] का मूल्यांकन करता है जो कि मैं जो चाहता हूं वह बिल्कुल नहीं है। धन्यवाद! –

+0

मैं अपने सभी पृष्ठों के नीचे <% स्क्रिप्ट%> का उपयोग करता हूं जिसमें कुछ मानक सामान पास किए गए हैं, जैसे अनुरोध ऑब्जेक्ट, उपयोगकर्ता ऑब्जेक्ट, फॉर्म त्रुटियां। – chovy

+8

यदि कोड [ऑब्जेक्ट ऑब्जेक्ट] का मूल्यांकन करता है, तो मैं 'JSON.stringify (game.gameState) 'सर्वर पक्ष का उपयोग करने का सुझाव देता हूं। फिर स्ट्रिंग ऑब्जेक्ट को स्क्रिप्ट टैग में रखा जाएगा। चूंकि ईजे प्रतिपादन सामान्य रूप से HTML के लिए विशेष वर्णों से बच निकलता है, इसलिए आप स्क्रिप्ट टैग के भीतर 'var clientGameState = <% - gameState%> ' का उपयोग करना चाहेंगे (' <% = ') यदि आपको प्रतिपादन के लिए गेमस्टेट की आवश्यकता है पृष्ठ भी, आप JSON.parse() को इसके ऊपर लूप करने के लिए कर सकते हैं। – Matthias

4

मुझे लगता है कि नीचे तर्क बेहतर है और यह मेरे लिए काम किया।

मान लें कि ईजेएस पृष्ठ पर पारित चर uid है, तो आप पास किए गए चर के साथ div टैग या h टैग की सामग्री प्राप्त कर सकते हैं। आप स्क्रिप्ट में div या h टैग की सामग्री तक पहुंच सकते हैं और इसे एक चर में असाइन कर सकते हैं। नीचे

कोड नमूना: (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

, जब आप स्रोत देखते हैं तो आप आसानी से संपूर्ण यूआईडी ऑब्जेक्ट देख सकते हैं। यह काम करता है भले ही यह सही दृष्टिकोण नहीं है – vardha

संबंधित मुद्दे