JADE + EXPRESS:迭代内联JS代码中的对象(客户端)?

问题描述:

我想实现一个谷歌地图根据其api。我想添加一个基于坐标的路径。因此我从我的模型中获得我的坐标,并且想要迭代该对象以使用这些点填充地图。在我玉模板我包括API的js代码:JADE + EXPRESS:迭代内联JS代码中的对象(客户端)?

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;') 

的问题是:翡翠呈现此片段

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) 
     ]; 

,因为它是在玉模板源...的 - 如果等。不会被解析!有任何想法吗?

谢谢!

整个脚本标记(在它下面缩进的所有东西)将在未经进一步解析的情况下通过raw传递。 Jade不使用HTML模板,而使用嵌套的javascript模板进行HTML模板。要将您的pins变量从玉石本地模板变量数据传递到脚本源代码,您必须执行其他一些方法,例如使用原始玉石来渲染一个小脚本标记,该标记仅将initialize函数与pins数据一起作为文字来调用,或者将你的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 2011-06-08 07:23:18

我传递的值作为隐藏的输入元素,例如:通过jQuery访问的

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

$("#variableName").val() 

Joe

脚本标签是纯文本的,你不能轻易地混合Jade来生成这个j avascript,它通常反映了糟糕的设计。你可以只序列化的东西作为JSON,你需要在客户端或使用快车暴露做到这一点

+1

+1快速曝光可能是你想要的。有一件事我没有得到:如果我想在使用jQuery在客户端发送消息之前在我的网页上执行一些动态的JS东西,那需要从node.js发送本地变量,那么最好的方法是什么? – 2012-01-09 04:17:20

+1

类似express-expose:p在发送给客户端之前没有“之前”,如果没有标记/ js,客户端无法运行 – tjholowaychuk 2012-01-09 20:54:53

+0

正确,合理,谢谢 – 2012-01-09 23:13:09

您可以使用此:

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

但是,您无法使用'var ok =#{someObjectOrNull}? true:false'。进一步'ok'将会是未定义的。改用Peter Lyons方法 '!=“var ok =”+(user?“true”:“false”)+“;”' – fider 2014-01-23 17:51:58

服务器端

JSON.stringify(users) 

客户端

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

我有一个类似的问题,这行代码解决ð它:

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

答案从this post