在 Javascript 中使用 Jade Array 将其转换为字符串
Using Jade Array in Javascript transforms it to a string
我正在将一组对象传递到我的 jade 模板,并想在我的 js 中将其用作 var
。
好像传输正确了,因为
each level, i in stats
.levelStats
创建 4 个 div(如预期的那样)
现在我有
script(type='text/javascript').
var statData = "!{stats}"
据我所知,应该将数据加载到 javascript 变量中。
它以某种方式做到了...
console.log(statData);
// output: [object Object],[object Object],[object Object],[object Object]
// this means the correct data must be there..somewhere
console.log(typeof statData);
// output: string
我做错了什么?
我怎样才能将整个数组放入 var 中?
解决方案+教训:
var foo = "!{bar}"
将数据变成字符串(回溯起来很明显)
正确的方法:var foo = !{bar}
each level, i in stats
.levelStats
您正在循环(一个数组?)stats
,其中 i
是一个索引,level
是您数组中位于 stats[i]
的元素。
但你似乎没有单独使用这些元素:
var statData = "!{stats}"
stats 仍然是数组,您会在 level
!
中找到每个元素
编辑 :
澄清后,保留整个数组并将其设置为变量:
var statData = !{JSON.stringify(stats)}
您需要在 <script>
标签中放置一个字符串。如何将数组变成字符串,以便以后可以将其转换回来? JSON.stringify.
所以,像这样的东西应该可以工作:
script.
var statData = !{JSON.stringify(stats)};
我花了一整天让它工作。这是更高级的示例,但是我们在 jade/pug 文件中将数组传递给 js。这里我们将位置数组传递给 google 地图初始化脚本。像这样使用它:
1)在服务器上准备数据
JSON.stringify(locations = [
{ lat: -31.563910, lng: 147.154312 },
{ lat: -33.718234, lng: 150.363181 },
{ lat: 52.319277, lng: 21.000466 }
])
2) 将其传递到您的 pug/jade 页面。
在那里,将它与您传递的变量一起使用,例如:DATA_THAT_YOUPASS
script.
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 3,
center: {lat: 52.5191758, lng: 23.0002262}
});
// Create an array of alphabetical characters used to label the markers.
var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
// Add some markers to the map.
// Note: The code uses the JavaScript Array.prototype.map() method to
// create an array of markers based on a given "locations" array.
// The map() method here has nothing to do with the Google Maps API.
var markers = locations.map(function(location, i) {
return new google.maps.Marker({
position: location,
label: labels[i % labels.length]
});
});
// Add a marker clusterer to manage the markers.
var markerCluster = new MarkerClusterer(map, markers,
{imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});
}
var mydata = !{DATA_THAT_YOUPASS}
console.log(mydata);
console.log(mydata);
var locations = mydata;
#map
script(src='https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js')
// Replace the value of the key parameter with your own API key.
script(async='', defer='', src='https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXX&callback=initMap')
我正在将一组对象传递到我的 jade 模板,并想在我的 js 中将其用作 var
。
好像传输正确了,因为
each level, i in stats
.levelStats
创建 4 个 div(如预期的那样)
现在我有
script(type='text/javascript').
var statData = "!{stats}"
据我所知,应该将数据加载到 javascript 变量中。 它以某种方式做到了...
console.log(statData);
// output: [object Object],[object Object],[object Object],[object Object]
// this means the correct data must be there..somewhere
console.log(typeof statData);
// output: string
我做错了什么? 我怎样才能将整个数组放入 var 中?
解决方案+教训:
var foo = "!{bar}"
将数据变成字符串(回溯起来很明显)
正确的方法:var foo = !{bar}
each level, i in stats
.levelStats
您正在循环(一个数组?)stats
,其中 i
是一个索引,level
是您数组中位于 stats[i]
的元素。
但你似乎没有单独使用这些元素:
var statData = "!{stats}"
stats 仍然是数组,您会在 level
!
编辑 :
澄清后,保留整个数组并将其设置为变量:
var statData = !{JSON.stringify(stats)}
您需要在 <script>
标签中放置一个字符串。如何将数组变成字符串,以便以后可以将其转换回来? JSON.stringify.
所以,像这样的东西应该可以工作:
script.
var statData = !{JSON.stringify(stats)};
我花了一整天让它工作。这是更高级的示例,但是我们在 jade/pug 文件中将数组传递给 js。这里我们将位置数组传递给 google 地图初始化脚本。像这样使用它: 1)在服务器上准备数据
JSON.stringify(locations = [
{ lat: -31.563910, lng: 147.154312 },
{ lat: -33.718234, lng: 150.363181 },
{ lat: 52.319277, lng: 21.000466 }
])
2) 将其传递到您的 pug/jade 页面。 在那里,将它与您传递的变量一起使用,例如:DATA_THAT_YOUPASS
script.
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 3,
center: {lat: 52.5191758, lng: 23.0002262}
});
// Create an array of alphabetical characters used to label the markers.
var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
// Add some markers to the map.
// Note: The code uses the JavaScript Array.prototype.map() method to
// create an array of markers based on a given "locations" array.
// The map() method here has nothing to do with the Google Maps API.
var markers = locations.map(function(location, i) {
return new google.maps.Marker({
position: location,
label: labels[i % labels.length]
});
});
// Add a marker clusterer to manage the markers.
var markerCluster = new MarkerClusterer(map, markers,
{imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});
}
var mydata = !{DATA_THAT_YOUPASS}
console.log(mydata);
console.log(mydata);
var locations = mydata;
#map
script(src='https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js')
// Replace the value of the key parameter with your own API key.
script(async='', defer='', src='https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXX&callback=initMap')