如何在 Jade/Pug 中对 ID 属性使用插值
How to use interpolation for the ID attribute in Jade/Pug
我正在尝试基于 MongoDB 数据库动态构建 chartContainers。对于某些背景,我正在使用 CanvasJS 创建股票图表。我有一个“股票”变量,我遍历它是我数据库中所有元素的数组。这是我的第一个 Web 开发项目,也是我第一次使用 javascript 如果有明显的问题,哈巴狗非常抱歉。作为参考,我使用 this template
构建了这个项目
console.log(stocks);
for(const element of stocks){
const str = 'chartContainer' + element.ticker;
console.log(str);
// Need to get data for that chart
renderChart(data1, str, element.ticker);
}
When this runs here is my log
这里是渲染图表函数(.js文件)
function renderChart(chartData, chartContainer, Ticker = "Ticker") {
var chart1 = new CanvasJS.Chart(chartContainer,
{
title:{
text: Ticker},
axisY:{ title:"Price",minimum: 0, maximum: 6, includeZero: false},
data: chartData });
chart1.render();
}
为了让这些“图表”显示在网络服务器上,我需要使用我之前定义的 ID 创建图表容器。这是在我的 pug 文件中,当我的数据库中有两个名为 TSLA 和 GOOGL 的项目时,它按预期工作。
#chartContainerTSLA(style='width: 25%; height: 300px;display: inline-block;')
#chartContainerGOOGL(style='width: 25%; height: 300px;display: inline-block;')
但是,我遇到的问题是我想将代码末尾设为我正在更改的字符串。我一直在关注 this link 如何对其进行插值,但它不起作用。
我尝试过的一些东西:
for result in stocks
#chartContainer!{result.ticker}(style='width: 25%; height: 300px;display: inline-block;')
我也试过更换!用 # 并且它们都没有工作
这是抛出的错误
36| for result in stocks
37| #chartContainer!{result.ticker}(style='width: 25%; height: 300px;display: inline-block;')
---------------------------^
unexpected text "!{res"
我也试过了
for result in stocks
- var containerName='chartContainer#{result.ticker}'
#!{containerName}(style='width: 25%; height: 300px;display: inline-block;')
那引发了错误
36| for result in stocks
37| - var containerName='chartContainer#{result.ticker}'
38| #!{containerName}(style='width: 25%; height: 300px;display: inline-block;')
--------------^
"!{containerName}" is not a valid ID.
我正在寻找一种动态生成这些图表容器的方法,这样我就不必在每次向数据库中输入内容时都手动创建图表容器。
我找到了解决方案
内部 JS 脚本:
for(const element of stocks){
renderChart(data1, element.ticker, element.ticker);
}
帕格内部:
for result in stocks
div(id=result.ticker,style='width: 25%; height: 300px;display: inline-block;')
您要查找的内容在 Pug.
中称为 attribute interpolation
在 Pug 中,用于赋予元素 id
属性的 shorthand 是您已经在使用并熟悉的 哈希语法:
div#chartContainer
然而,这也可以使用 常规属性语法 编写,如下所示:
div(id="chartContainer")
为了在 id
属性中使用插值,您必须使用常规属性语法而不是 shorthand。
这就是您如何在循环中使用带有 id
属性的属性插值,使用 JS 字符串连接或 JS template strings:
// using string concatenation
for result in stocks
div(id= 'chartContainer' + result.ticker, style='...')
// using template strings
for result in stocks
div(id=`chartContainer${result.ticker}`, style='...')
我正在尝试基于 MongoDB 数据库动态构建 chartContainers。对于某些背景,我正在使用 CanvasJS 创建股票图表。我有一个“股票”变量,我遍历它是我数据库中所有元素的数组。这是我的第一个 Web 开发项目,也是我第一次使用 javascript 如果有明显的问题,哈巴狗非常抱歉。作为参考,我使用 this template
构建了这个项目 console.log(stocks);
for(const element of stocks){
const str = 'chartContainer' + element.ticker;
console.log(str);
// Need to get data for that chart
renderChart(data1, str, element.ticker);
}
When this runs here is my log
这里是渲染图表函数(.js文件)
function renderChart(chartData, chartContainer, Ticker = "Ticker") {
var chart1 = new CanvasJS.Chart(chartContainer,
{
title:{
text: Ticker},
axisY:{ title:"Price",minimum: 0, maximum: 6, includeZero: false},
data: chartData });
chart1.render();
}
为了让这些“图表”显示在网络服务器上,我需要使用我之前定义的 ID 创建图表容器。这是在我的 pug 文件中,当我的数据库中有两个名为 TSLA 和 GOOGL 的项目时,它按预期工作。
#chartContainerTSLA(style='width: 25%; height: 300px;display: inline-block;')
#chartContainerGOOGL(style='width: 25%; height: 300px;display: inline-block;')
但是,我遇到的问题是我想将代码末尾设为我正在更改的字符串。我一直在关注 this link 如何对其进行插值,但它不起作用。
我尝试过的一些东西:
for result in stocks
#chartContainer!{result.ticker}(style='width: 25%; height: 300px;display: inline-block;')
我也试过更换!用 # 并且它们都没有工作 这是抛出的错误
36| for result in stocks
37| #chartContainer!{result.ticker}(style='width: 25%; height: 300px;display: inline-block;')
---------------------------^
unexpected text "!{res"
我也试过了
for result in stocks
- var containerName='chartContainer#{result.ticker}'
#!{containerName}(style='width: 25%; height: 300px;display: inline-block;')
那引发了错误
36| for result in stocks
37| - var containerName='chartContainer#{result.ticker}'
38| #!{containerName}(style='width: 25%; height: 300px;display: inline-block;')
--------------^
"!{containerName}" is not a valid ID.
我正在寻找一种动态生成这些图表容器的方法,这样我就不必在每次向数据库中输入内容时都手动创建图表容器。
我找到了解决方案
内部 JS 脚本:
for(const element of stocks){
renderChart(data1, element.ticker, element.ticker);
}
帕格内部:
for result in stocks
div(id=result.ticker,style='width: 25%; height: 300px;display: inline-block;')
您要查找的内容在 Pug.
中称为 attribute interpolation在 Pug 中,用于赋予元素 id
属性的 shorthand 是您已经在使用并熟悉的 哈希语法:
div#chartContainer
然而,这也可以使用 常规属性语法 编写,如下所示:
div(id="chartContainer")
为了在 id
属性中使用插值,您必须使用常规属性语法而不是 shorthand。
这就是您如何在循环中使用带有 id
属性的属性插值,使用 JS 字符串连接或 JS template strings:
// using string concatenation
for result in stocks
div(id= 'chartContainer' + result.ticker, style='...')
// using template strings
for result in stocks
div(id=`chartContainer${result.ticker}`, style='...')