Можно ли перебирать пары ключ / значение объекта?
Рассмотрим этот пример:
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 Это фундаментальный принцип Moustache. Вся логика должна быть извлечена в представление, которое отличается от шаблона. В данном случае это кажется более неловким, потому что это всего лишь немного логики, но это скользкая дорожка, на которую Усы даже не подпускают :)
Справедливо. Спасибо за объяснение!
Фундаментальный принцип, о котором говорилось изначально, делает Уса слишком самоуверенным, я не всегда хочу устраивать отдельную фазу преобразования, чтобы Усы были счастливы ...
Разве разрешение итерации по простому объекту действительно вводит логику в представление усов? Мой аргумент был бы отрицательным. Я поклонник принципа без логики, но мы уже можем перебирать массивы, я согласен с 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 , о выше , это проблема, некрасиво обеспечивать преобразование структур данных ...
Это не изящное решение, но я использую 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, что это излишне неудобно. Рассмотрим следующий пример:
Я бы хотел, чтобы мои данные были:
Но это должно быть:
Для рендеринга: