在我的主页上,我有一个forEach循环,该循环显示了业务模式下来自不同业务的促销。在我的index.js控制器中,我定义了如下促销(随机播放是随机排序,但此处不相关):
let promotions = [];
businesses.forEach(business => {
promotions = promotions.concat(business.promotions);
});
shuffleArray(promotions);
在我的主页上,促销显示如下:
<div class="gold">
<% promotions.forEach(function(promotion) { %>
<img class='lazy business-advert-image' data-src="<%- cloudinary.url(promotion.public_id, {width: 450, height: 300, crop: 'pad', quality: 'auto', fetch_format: 'auto', flags: 'lossy'}) %>" alt="Business Advertising Promotion">
<% }); %>
</div>
这工作得很好,尽管除此之外,我还尝试覆盖促销活动的公司名称(这是一对多关系,即一个业务可能有5个不同的促销活动)。但是,我在为如何从业务模型访问其他字段而苦苦挣扎。我尝试过:
promotion.business.name
business.name
这两个都给出“未定义业务”错误;并且:
business.promotion.name
给出未定义的错误。
任何人都可以建议我如何访问名称(或“商业模式”中的其他字段)吗?谢谢
答案 0 :(得分:1)
如果是我,我将在您的控制器中进行繁重的工作,并避免在视图层中使用嵌套循环。
因此控制器方法将具有:
let promotions = [];
businesses.forEach(business => {
let businessPromotions = business.promotions.map(promotion => {
promotion.businessName = business.name;
return promotion;
})
promotions = promotions.concat(businessPromotions);
});
然后在视图中,您可以通过<%= promotion.businessName %>
(在Promotions forEach循环中)访问商户名称
答案 1 :(得分:0)
首先,您还需要从服务器发送公司名称。您现在只是阵列中的促销活动。 促销= Promotions.concat(business.promotions); 在上面的行中将数据添加到这样的数组中
array=[
promotionArray1[5],
promotionArray2[5]
]
此结构没有公司名称。它只有促销。因此,您需要像这样更改它 这应该是这样的
promotions = promotions.concat(business);
这意味着这个时间数组将是这样
array=[
business1.promotionArray1[5],
business2.promotionArray2[5]
]
现在在ejs中,您需要放置嵌套循环才能访问所有数据。
<div class="gold">
<% promotions.forEach(function(business) { %>
<% business.forEach(function(promotion1) { %>
put your html here.
business.name
promotion1.name
<% }); %>
<% }); %>
</div>