Mustache.js: 迭代对象键/值对?

创建于 2015-05-28  ·  11评论  ·  资料来源: janl/mustache.js

是否可以迭代对象的键/值对?

考虑这个例子:

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 的方法

谢谢。

最有用的评论

允许对简单对象进行迭代是否真的将逻辑引入了胡子视图? 我的论点是否定的。 我是无逻辑原则的粉丝,但我们已经可以迭代数组了,我同意 OP 的观点,即这是不必要的尴尬。 考虑以下示例:

我希望我的数据是:

"attr": {
  "class": "foo",
  "href": "/somewhere"
}

但它必须是:

"attr": [
  {
    "key": "class",
    "value": "foo"
  },
  {
    "key": "href",
    "value": "/somewhere"
  }
]

渲染:

<a{{#attr}} {{ key }}="{{ value }}"{{/attr}}></a>

所有11条评论

嗨@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;
}

存在?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

kuldeepdhaka picture kuldeepdhaka  ·  9评论

ForbesLindesay picture ForbesLindesay  ·  14评论

rlightner picture rlightner  ·  7评论

funston picture funston  ·  7评论

barbalex picture barbalex  ·  5评论