【发布时间】:2014-08-22 19:21:03
【问题描述】:
对于实际通话,我需要这样的东西:
<script id="messagesTemplate" type="text/x-handlebars-template">
{{#each messages.messages}}
{{#each to}}
{{#ifCond username messages.sessionUserName}}
<h1>{{username}} is equal to {{messages.sessionUserName}}</h1>
{{else}}
<h1>{{username}} is not equal to {{messages.sessionUserName}}</h1>
{{/ifCond}}
{{/each}}
{{/each}}
在数据库中,“to”是一个文档数组,每个文档都有一个“用户名”..因此需要 === messages.sessionUserName 来模板/呈现某些值的 HTML(例如 {{# if read.marked}})
"to" : [
{
"user" : ObjectId("53aada6f8b10eb0000ec8a90"),
"username" : "username1",
"updated" : ISODate("2014-07-01T19:39:45Z"),
"_id" : ObjectId("53b30e81b0eff5cb1e2ecb21"),
"read" : {
"marked" : true
}
}
]
值得注意的是,usernameTest 和 sessionUserName 都是通过 express 附加到 res.json() 末尾的值,因此可以通过 messages.usernameTest 和 messages.sessionUserName 访问它们,但它们并不存在于每个文档中......这些值仅在全局父文档中可用。
res.json({
messages : messages,
sessionUserName: req.session.username,
usernameTest: usernameTest
});
这个因素可能是为什么每个都只渲染is equal to,但对第三个(The ../ path segment references the parent template scope)没有意义:
{{#each messages.messages}}
<h1>{{usernameTest}} is equal to {{sessionUserName}}</h1>
<h1>{{../usernameTest}} is equal to {{../sessionUserName}}</h1>
<h1>{{../messages.usernameTest}} is equal to {{../messages.sessionUserName}}</h1>
从 https://stackoverflow.com/a/9405113/3095287 中提取自定义比较帮助器,{{#ifCond v1 v2}} 之后的模板似乎没有呈现上层作用域元素..
Handlebars.registerHelper('ifCond', function(v1, v2, options) {
if(v1 === v2) {
return options.fn(this);
}
return options.inverse(this);
});
ifCond 比较确实在 {{#each}} 块之外起作用:
<script id="messagesTemplate" type="text/x-handlebars-template">
{{#ifCond messages.usernameTest messages.sessionUserName}}
<h1>{{messages.usernameTest}} is equal to {{messages.sessionUserName}}</h1>
{{else}}
<h1>{{messages.usernameTest}} is not equal to {{messages.sessionUserName}}</h1>
{{/ifCond}}
{{#each messages.messages}}
..
.. 呈现:
username1 等于 username1
但是,它在 {{#each}} 块内不起作用:
{{#each messages.messages}}
{{#ifCond messages.usernameTest messages.sessionUserName}}
<h1>{{messages.usernameTest}} is equal to {{messages.sessionUserName}}</h1>
{{else}}
<h1>{{messages.usernameTest}} is not equal to {{messages.sessionUserName}}</h1>
{{/ifCond}}
...
..因为它只呈现:
等于
即使是 {{../element}}
{{#each messages.messages}}
{{#ifCond messages.usernameTest messages.sessionUserName}}
<h1>{{../messages.usernameTest}} is equal to {{../messages.sessionUserName}}</h1>
{{else}}
<h1>{{../messages.usernameTest}} is not equal to {{../messages.sessionUserName}}</h1>
{{/ifCond}}
...
..渲染是:
等于
【问题讨论】:
标签: javascript express helper handlebars.js