Javascript 翡翠+;EXPRESS:在内联JS代码中迭代对象(客户端)?
我想实现一个基于api的谷歌地图。我想添加一个基于坐标的路径。因此,我从模型中获取坐标,并希望迭代对象,用这些点填充地图。在我的jade模板中,我包含如下api js代码:Javascript 翡翠+;EXPRESS:在内联JS代码中迭代对象(客户端)?,javascript,templates,node.js,express,pug,Javascript,Templates,Node.js,Express,Pug,我想实现一个基于api的谷歌地图。我想添加一个基于坐标的路径。因此,我从模型中获取坐标,并希望迭代对象,用这些点填充地图。在我的jade模板中,我包含如下api js代码: script(type='text/javascript') function initialize() { var myLatLng = new google.maps.LatLng(0, -180); var myOptions = { zoom: 3, c
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;')
问题是:jade呈现了这个片段
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)
];
因为它是在玉模板源。。。没有解析-if等!有什么想法吗
谢谢 整个脚本标记(它下面缩进的所有内容)将通过raw传递,而无需进一步解析。Jade不使用HTML模板,而使用HTML模板和嵌套javascript模板。要将pins
变量从jade本地模板变量数据传递到脚本源代码,您必须使用其他方法,例如使用raw jade呈现一个小脚本标记,该标记仅调用initialize
函数,并将pins
数据作为文本,或者将pins
数据粘贴到dom中的某个位置,然后从那里读取数据。脚本标记下面的这些行(伪代码,尚未测试)
-如果(引脚类型)!=null)
!= ""
!= “var引脚=[];”
-在销中插入每个销
!= “pins.push(新Pin(“+Pin.latitude+”,“+Pin.longitude+”);”
!= “初始化(引脚);”
!= ""
我将该值作为隐藏输入元素传递,例如:
input(type='hidden', id='variableName', value='#{variableName}')
通过jQuery访问:
$("#variableName").val()
Joe脚本标记纯粹是文本,您不能轻易地混合使用Jade来生成此javascript,这通常反映了糟糕的设计。您可以将客户端上需要的内容序列化为JSON,也可以使用ExpressExpose来实现这一点
script
console.log(#{var_name});
服务器端
JSON.stringify(users)
客户端
var users=JSON.parse(("#{users}").replace(/"/g,'"'));
我有一个类似的问题,这行代码解决了这个问题:
var myvar = !{JSON.stringify(mydata)};
答案来源于+1 Express expose可能就是您想要的。有一件事我不明白:如果我想在将网页发送到客户端之前使用jQuery在网页上执行一些动态JS操作,那就需要从node.JS发送局部变量,正确的方法是什么?使用类似express expose:p的东西,没有“before”将其发送到客户端,没有标记/js,您无法在客户端上操作,但您不能使用
var ok=#{someObjectOrNull}?真:假
。进一步的ok
将被取消定义。而是使用Peter Lyons方法!=“var ok=“+(用户?“true”):“false”)+”;“
var myvar = !{JSON.stringify(mydata)};