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>"
我传递的值作为隐藏的输入元素,例如:通过jQuery访问的
input(type='hidden', id='variableName', value='#{variableName}')
:
$("#variableName").val()
Joe
脚本标签是纯文本的,你不能轻易地混合Jade来生成这个j avascript,它通常反映了糟糕的设计。你可以只序列化的东西作为JSON,你需要在客户端或使用快车暴露做到这一点
+1快速曝光可能是你想要的。有一件事我没有得到:如果我想在使用jQuery在客户端发送消息之前在我的网页上执行一些动态的JS东西,那需要从node.js发送本地变量,那么最好的方法是什么? – 2012-01-09 04:17:20
类似express-expose:p在发送给客户端之前没有“之前”,如果没有标记/ js,客户端无法运行 – tjholowaychuk 2012-01-09 20:54:53
正确,合理,谢谢 – 2012-01-09 23:13:09
您可以使用此:
script
console.log(#{var_name});
但是,您无法使用'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(/"/g,'"'));
该多好啊来到最初。谢谢你会试试! – Tronic 2011-06-08 07:23:18