Может ли mustache повторять массив верхнего уровня?
мой объект выглядит так:
['foo','bar','baz']
и я хочу использовать шаблон усы, чтобы произвести из него что-то вроде этого:
"<ul><li>foo</li><li>bar</li><li>baz</li></ul>"
но как? Мне действительно нужно сначала вгрызаться во что-то подобное?
{list:['foo','bar','baz']}
5 ответов
Вы можете сделать это так...
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>', ['foo','bar','baz']);
Он также работает для подобных вещей...
var obj = [{name: 'foo'}, {name: 'bar'}];
var tmp = '<ul>{{#.}}<li>{{name}}</li>{{/.}}</ul>';
Mustache.render(tmp, obj);
У меня была та же проблема сегодня утром, и после небольшого эксперимента я обнаружил, что вы можете использовать {{.}} для ссылки на текущий элемент массива:
<ul>
{{#yourList}}
<li>{{.}}</li>
{{/yourList}}
</ul>
основываясь на ответе @danjordan, это сделает то, что вы хотите:
Mustache.render('<ul>{{#.}}<li>{{.}}</li>{{/.}}</ul>',['foo','bar','baz']);
возвращение:
<ul><li>foo</li><li>bar</li><li>baz</li></ul>
Ниже приведены примеры визуализации многомерного массива в шаблоне:
Пример 1
'use strict';
var Mustache = require('mustache');
var view = {test: 'div content', multiple : ['foo', 'bar'], multiple_2 : ['hello', 'world']};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>{{.}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{.}}</li>{{/multiple_2}}</ul>';
var output = Mustache.render(template, view);
console.log(output);
Пример 2
'use strict';
var Mustache = require('mustache');
var view = {test: 'div content', multiple : [{name: 'foo', gender: 'male'}, {name: 'bar', gender: 'female'}], multiple_2 : [{text: 'Hello', append: '**', prepend: '**'}, {text: 'World', append: '**', prepend: '**'}]};
var template = '<div>{{test}}</div><ul>{{#multiple}}<li>Hello my name is {{name}}. And I am {{gender}}</li>{{/multiple}}</ul><ul>{{#multiple_2}}<li>{{prepend}}_{{text}}_{{append}}</li>{{/multiple_2}}</ul>';
var output = Mustache.render(template, view);
console.log(output);
для тестового запуска сохраните приведенные выше примеры в файле под названием " test.Яш выполните следующую команду в командной строке
nodejs test.js
Я не думаю, что усе получится! (удивительно) Вы можете перебирать список объектов, а затем обращаться к атрибутам каждого объекта, но вы не можете перебирать простой список значений!
Итак, вы должны преобразовать свой список в:
[ {"value":"foo"},{"value":"bar"},{"value":"baz"} ]
и тогда ваш шаблон будет:
<ul>
{{#the_list}}
<li>{{value}}</li>
{{/the_list}}
</ul>
для меня это похоже на серьезную проблему с усами - любая система шаблонов должна иметь возможность перебирать список простых значений!