2011-06-07 9 views
8

मैं अपने एपीआई के आधार पर एक Google मानचित्र को कार्यान्वित करना चाहता हूं। मैं इसके निर्देशांक के आधार पर एक पथ जोड़ना चाहता हूं। इसलिए मुझे अपने मॉडल से अपने निर्देशांक मिलते हैं और इस बिंदु के साथ मानचित्र को फ़िल्टर करने के लिए ऑब्जेक्ट पर पुनरावृत्ति करना चाहते हैं। यदि आदि - जेड इस स्निपेटजेएडीई + एक्सप्रेस: ​​इनलाइन जेएस कोड (क्लाइंट-साइड) में ऑब्जेक्ट पर इटरेट करना?

var flightPlanCoordinates = [ 

     - if (typeof(pins) != null) 
      - var.pins.forEach(function(pin) { 
       new google.maps.LatLng(pin.latitude, pin.longitude), 
      - }) 
      new google.maps.LatLng(0,0) 
     ]; 

renders के रूप में यह जेड टेम्पलेट स्रोत में है ...:

script(type='text/javascript') 
    function initialize() { 
     var myLatLng = new google.maps.LatLng(0, -180); 
     var myOptions = { 
     zoom: 3, 
     center: myLatLng, 
     mapTypeId: google.maps.MapTypeId.TERRAIN 
     }; 

     var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
     var flightPlanCoordinates = [ 

     - if (typeof(pins) != null) 
      - var.pins.forEach(function(pin) { 
       new google.maps.LatLng(pin.latitude, pin.longitude), 
      - }) 
      new google.maps.LatLng(0,0) 
     ]; 
     var flightPath = new google.maps.Polyline({ 
     path: flightPlanCoordinates, 
     strokeColor: "#FF0000", 
     strokeOpacity: 1.0, 
     strokeWeight: 2 
     }); 

     flightPath.setMap(map); 
    } 

div#map_canvas(style='height: 500px; background-color: #990000;') 

समस्या है: मेरी जेड टेम्पलेट में मैं इस तरह एपीआई js कोड शामिल पार्स नहीं किया जाता है! कोई विचार?

धन्यवाद!

उत्तर

16

पूरी स्क्रिप्ट टैग (सब कुछ इसके तहत इंडेंट) आगे पार्स बिना कच्चे माध्यम से पारित किया जा रहा है। जेड एचटीएमएल टेम्पलेटिंग एचटीएमएल टेम्पलेटिंग प्लस नेस्टेड जावास्क्रिप्ट टेम्पलेटिंग नहीं करता है। स्क्रिप्ट स्रोत कोड के लिए जेड स्थानीय टेम्पलेट चर डेटा से अपने pins चर पारित करने के लिए, आप कच्चे जेड का उपयोग कर एक छोटे से स्क्रिप्ट टैग है कि बस एक शाब्दिक रूप pins डेटा के साथ अपने initialize फ़ंक्शन को कॉल प्रस्तुत करने के लिए जैसे कुछ अन्य दृष्टिकोण करने के लिए है, या जाएगा अपने pins डेटा को कहीं भी डोम में चिपकाएं और फिर वहां से इसे पढ़ें। अपनी स्क्रिप्ट टैग नीचे इन पंक्तियों के साथ कुछ (स्यूडोकोड, परीक्षण नहीं किया)

- if (typeof(pins) != null) 
    != "<script type='text/javascript'>" 
    != "var pins = [];" 
    - forEach pin in pins 
    != "pins.push(new Pin(" + pin.latitude + ", " + pin.longitude + "));" 
    != "initialize(pins);" 
    != "</script>" 
+0

आह अच्छा मूल रूप से आया था। धन्यवाद, आप कोशिश करेंगे! – Tronic

4

मैं एक छिपा इनपुट तत्व के रूप में मूल्य, जैसे पारित कर दिया:

input(type='hidden', id='variableName', value='#{variableName}') 

jQuery के माध्यम से एक्सेस किया गया:

$("#variableName").val() 

जो

2

स्क्रिप्ट टैग पूरी तरह से टेक्स्ट हैं, आप जेड को आसानी से जेड बनाने के लिए मिश्रण नहीं कर सकते अवकाश, यह आमतौर पर खराब डिजाइन का प्रतिबिंब है। तुम बस JSON के रूप में चीजें हैं जो आप क्लाइंट पर की जरूरत को क्रमानुसार या का उपयोग एक्सप्रेस-बेनकाब करने के लिए इस

+1

+1 एक्सप्रेस-एक्सपोज़ शायद आप जो चाहते हैं। एक बात मैं नहीं मिलता है: मैं की जरूरत है कि स्थानीय Node.js से भेजे गए चर, jQuery मेरी वेब पेज पर कुछ गतिशील जे एस चीज़ें करने का उपयोग करने के लिए यह क्लाइंट साइड भेजने से पहले चाहते हैं, क्या यह करने के लिए उचित तरीके से? पी कोई ग्राहक को भेजने "पहले", आप अपने मार्कअप/js वहाँ –

+1

'var ok = # {someObjectOrNull}? सच: झूठा'। आगे 'ठीक' अपरिभाषित होगा।इसके बजाय पीटर लियोन विधि '! =" Var ok = "+ (उपयोगकर्ता?" सत्य ":" झूठा ") +"; "' – tjholowaychuk

+0

अधिकार के बिना ग्राहक पर काम नहीं कर सकता, कि समझ में आता है वहाँ है, धन्यवाद –

3

आप इस का उपयोग कर सकते हैं कर सकते हैं:

script 
    console.log(#{var_name}); 
+0

लेकिन आप का उपयोग नहीं कर सकते हैं: जैसे एक्सप्रेस-पर्दाफाश कुछ के साथ – fider

1

सर्वर साइड

JSON.stringify(users) 

ग्राहक के पक्ष

var users=JSON.parse(("#{users}").replace(/&quot;/g,'"')); 
0

मेरे पास एक समान समस्या थी और कोड की यह पंक्ति हल यह डी:

var myvar = !{JSON.stringify(mydata)}; 

जवाब this post

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