迭代快速车把中的对象
Posted
技术标签:
【中文标题】迭代快速车把中的对象【英文标题】:iterating over objects in express-handlebars 【发布时间】:2018-06-07 13:10:09 【问题描述】:这是我传递给车把模板的模型
module.exports = function(showHeader, userId) // the data model
return
userId: userId,
seminars: userSeminars;
;
;
var userSeminars = [ // some information
seminarId: 1,
isRated: true
,
seminarId: 2,
isRated: false
];
在渲染我的模板时,我使用这个 html 代码
#each seminars
<div class="seminarContainer">
#if isRated
<button onclick="loadStatistics(seminarId, userId)">Do Something 1</button>
else
<button onclick="loadQuestionnaire(seminarId)">Do Something 2</button>
/if
</div>
/each
但在调试时,userId
未定义。我去了这个测试例程并将它写在上面每个循环
$(document).ready(function ()
alert(userId); // this works
);
userId
不是未定义的。但是当迭代数组时它是未定义的。如何将数组范围留在循环中?我必须访问数据模型对象,而不是数组中的属性。
编辑
Access a variable outside the scope of a Handlebars.js each loop
当我想离开范围时,我可以使用../userId
循环内
<p>../userId</p>
工作正常,但将其用于
等参数时onclick="loadStatistics(seminarId, ../userId)"
第二个参数未定义。
【问题讨论】:
【参考方案1】:经过快速搜索,我发现了这个:
Access a variable outside the scope of a Handlebars.js each loop
我总结一下,handlebars 提供了一个选项来使用../
语法来引用父作用域。
例如:
<button onclick="loadStatistics(seminarId, ../userId)">Do Something 1</button>
编辑:
进一步看,我还发现this answer 有一个类似的问题。显然,因为当您声明 #if
时,您在作用域链中又上了一层楼,因此您也需要考虑到这一点。
#if isRated
<button onclick="loadStatistics(seminarId, ../../userId)">Do Something 1</button>
else
<button onclick="loadQuestionnaire(seminarId)">Do Something 2</button>
/if
【讨论】:
hm 是的,这是一个好的开始,但是当传入参数onclick="loadStatistics(seminarId, ../userId)"
时,它仍然是未定义的。当写 <p>../userId</p>
时它可以工作
我编辑了我的答案,请尝试一下,让我知道结果如何。以上是关于迭代快速车把中的对象的主要内容,如果未能解决你的问题,请参考以下文章
“this”似乎在车把“每个”助手中的旧迭代中具有价值(在 mandrill 模板中使用)
res.render 中的 Express-Node JS 车把模板:如何迭代?