是否可以迭代对象的键/值对?
考虑这个例子:
var values = {
'single': 'Single bed',
'double': 'Double bed',
'twin': 'Twin beds'
};
等效的 handlebar.js 代码:
<select name="bed_type">
{{#values}}
<option value="{{@key}}">{{this}}</option>
{{/values}}
</select>
我没有找到使用 mustache.js 的方法
谢谢。
嗨@chlab!
与其将数据直接传递给渲染器,不如将其格式化为view
对象。 或者使用自定义助手。 关于这些 stackoverflow 线程有一些想法:
http://stackoverflow.com/questions/9058774/handlebars-mustache-is-there-a-built-in-way-to-loop-through-the-properties-of
http://stackoverflow.com/questions/9981907/how-to-iterate-over-a-hash-in-mustache-js
如果还不清楚,请告诉我们。 干杯!
谢谢@dasilvacontin。
这似乎是一种非常尴尬的方式,不是吗? 这背后的原因是什么? 车把方式不是更简单吗?
干杯
@chlab这是 Mustache 的基本原则。 所有的逻辑都应该提取到一个视图中,这与模板不同。 在这种情况下,它看起来更尴尬,因为它只是一点点逻辑,但这是一个滑坡,Mustache 甚至不让你下去:)
很公平。 感谢您的解释!
原来提到的根本原则,让Mustache太自以为是了,我不是总想安排一个单独的转换阶段来让Mustache开心……
允许对简单对象进行迭代是否真的将逻辑引入了胡子视图? 我的论点是否定的。 我是无逻辑原则的粉丝,但我们已经可以迭代数组了,我同意 OP 的观点,即这是不必要的尴尬。 考虑以下示例:
我希望我的数据是:
"attr": {
"class": "foo",
"href": "/somewhere"
}
但它必须是:
"attr": [
{
"key": "class",
"value": "foo"
},
{
"key": "href",
"value": "/somewhere"
}
]
渲染:
<a{{#attr}} {{ key }}="{{ value }}"{{/attr}}></a>
嗨,大家好,
如何迭代匿名列表? 我尝试使用 {{#.}} 和 {{/.}} 但这不起作用。
谢谢
迭代匿名列表
let facts = doc.data();
res.render('index', {facts});
<ul>
{{#each facts}}
<li>Key: {{@key}} Value = {{this}}</li>
{{/each}}
</ul>
这个问题有什么官方的吗?
如何真正使用带有键值对的匿名对象列表?
请展示一个使用建议对象var values = { 'single': 'Single bed', ...}
和问题的建议输出的真实示例。
PS: @prashantcs8你的例子是真实的吗? 不工作。
@chlab我们在 2018 年...... Mustache 中没有使用匿名引用的选项?
@baseten,约侑“但它必须是”上面,这就是问题所在,是丑陋的执行数据结构convertions ...
这不是一个优雅的解决方案,但我正在使用res.render('index', objs2list(obj))
,其中可能存在 Mustache 辅助方法来进行转换,
function objs2list(p) {
r = [];
for (var key in p) if (p.hasOwnProperty(key)) {
r.push({"@key":key,"@val":p[key]});
}
return r;
}
存在?
最有用的评论
允许对简单对象进行迭代是否真的将逻辑引入了胡子视图? 我的论点是否定的。 我是无逻辑原则的粉丝,但我们已经可以迭代数组了,我同意 OP 的观点,即这是不必要的尴尬。 考虑以下示例:
我希望我的数据是:
但它必须是:
渲染: