Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 翡翠+;EXPRESS:在内联JS代码中迭代对象(客户端)?_Javascript_Templates_Node.js_Express_Pug - Fatal编程技术网

Javascript 翡翠+;EXPRESS:在内联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

我想实现一个基于api的谷歌地图。我想添加一个基于坐标的路径。因此,我从模型中获取坐标,并希望迭代对象,用这些点填充地图。在我的jade模板中,我包含如下api 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;')
问题是: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)};