我正在使用node,express,knex,postgres,EJS和bootstrap。我有一个表deckorderfil,它具有ordnbr的主键列。我的另一张表decktowfil,有一个ordnbr的外键,引用了deckorderfil。
我遇到的问题是,我似乎无法让EJS只打印那些与deckorderfil相匹配的decktowfil结果。
通过以下操作,我已经成功地弄清楚了如何在对URL进行GET请求后如何显示两个结果:
我的index.js路由:
router.get('/dashboard', authMiddleware.ensureLoggedIn, function(req, res) {
Tow.getTows().then(tows => {
Job.getJobs().then(jobs => {
jobs = JSON.parse(JSON.stringify(jobs)); //deckorderfil table
tows = JSON.parse(JSON.stringify(tows)); //decktowfil table
res.render('dashboard', { title: 'Express', jobs: jobs, tows: tows });
});
});
});
我的dashboard.ejs:
<% for (let i = 0; i < jobs.length; i++) { %> <!-- deckorderfil (primary key) table -->
<%= jobs[i].ordnbr %>
<% } %>
<% for (let j = 0; j < tows.length; j++) { %> <!-- decktowfil (foreign key) table -->
<%= tows[j].ordnbr %>
<% } %>
dashboard.ejs打印以下内容:
D1 D2 D3 (the jobs ordnbr's) D1 D1 D2 (the tows ordnbr's)
我的问题是,如何创建一个IF语句,说明“如果作业ordnbr是D1,则只返回也等于D1的丝束ordnbr,并为每个这些都创建div”?
我已经成功地循环了我的EJS以产生div,该div显示了每个deckorderfil ID及其其他变量。我正在尝试将匹配的decktowfil记录作为这些div嵌入到这些div中。这是我要完成的事情的图片。
我应该通过Knex,EJS还是jquery / javascript来做到这一点?如果是这样,那么在哪里和什么时候?到目前为止,我已经尝试将HTML中的父元素的ID设置为deckorderfil ordnbr,然后将我的EJS查询与此匹配,但这没有用。
谢谢,如果您还需要其他任何答案,请告诉我。
答案 0 :(得分:0)
在不知道对象确切形状的情况下,这是一种可行的实现方式:
Express应用
const jobs = [
{
orderNum: 'D1'
},
{
orderNum: 'D2'
},
{
orderNum: 'D3'
},
];
const tows = [
{
orderNum: 'D1',
orders: [
1,
2,
3,
],
},
{
orderNum: 'D2',
orders: [
1,
2,
3,
],
},
{
orderNum: 'D3',
orders: [
1,
2,
3,
],
},
];
app.get('/', (req, res, next) => {
res.render('index', { jobs, tows });
});
Index.ejs *
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
.outer {
border: 1px solid red;
padding: 18px;
margin: 12px;
}
.inner {
margin: 12px;
padding: 12px;
border: 1px solid green;
}
</style>
</head>
<body>
<% for (let i = 0; i < jobs.length; i++) { %>
<div class="outer">
<p>Jobs<%= jobs[i].orderNum %></p>
<% tows.find(tow => tow.orderNum === jobs[i].orderNum).orders.forEach(order => { %>
<div class="inner">
<p>Tows: id <%= order %></p>
</div>
<% }); %>
</div>
<% } %>
</body>
</html>
结果:
答案 1 :(得分:0)
好,我知道了。都是为了弄清楚如何嵌套for循环并正确设置div。
这是我构造EJS以获得正确输出的方式。我不需要使用.find()运算符。
<% for (let i = 0; i < jobs.length; i++) { %>
<div class="outer">
<p>Jobs <%= jobs[i].ordnbr %></p>
<% for (let j = 0; j < tows.length; j++) { %>
<% if (tows[j].ordnbr === jobs[i].ordnbr) { %>
<div class="inner">
<p>Tow: <%= tows[j].tow_id %></p>
</div>
<% } %>
<% } %>
</div>
<% } %>
谢谢Daniel的帮助。你激发了我的创造力。