(1) Вы можете использовать if
для разветвления петли на основе состояния, наблюдаемого в наборе данных. Например, этот Nunjucks
код:
{% for data in dataArr %}
{% if data.filter == 'round' %}
<div>{{ data.value | round }}</div>
{% elif data.filter == 'sort' %}
<div>{{ data.value | sort }}</div>
{% else %}
<div>{{ data.value }}</div>
{% endif %}
{% endfor %}
производит этот html
код:
<div>lcat</div> <div>124</div> <div>0,1,2,3,6</div>
Из набора данных.
Вы можете играть с ним в этом jsFiddle: http://jsfiddle.net/xmojmr/gbLLryuz/
(2) Или вы можете свернуть свой собственный фильтр, который будет принимать произвольную строку выражения фильтра, определенный в наборе данных и ввести код (незащищенный) на страницу двигателестроение (Вы можете прочитать немного о том, почему намеренно позволяя инъекции кода не является хорошей идеей Wikipedia: Code injection)
Например, если env
переменная типа Nunjucks.Environment затем добавить Ф.О. llowing фильтр перед запуском JavaScript
шаблон кода Rendering
env.addFilter('eval', function(value, filterExpression) {
return env.renderString(
"{{ filterArgument | " + filterExpression + " }}",
{ filterArgument: value }
);
});
позволяет использовать упрощенную эквивалентную Nunjucks
кода
{% for data in dataArr %}
{% if data.filter %}
<div>{{ data.value | eval(data.filter) }}</div>
{% else %}
<div>{{ data.value }}</div>
{% endif %}
{% endfor %}
Приведенный выше код производит следующий html
код:
<div>lcat</div> <div>124</div> <div>123.85</div> <div>0,1,2,3,6</div>
применительно к набор данных ниже (обратите внимание на новый раунд (2)):
{
name: 'name',
value: 'lcat'
}, {
name: 'score',
value: '123.852',
filter: 'round'
}, {
name: 'score2',
value: '123.852',
filter: 'round(2)'
}, {
name: 'groups',
value: [1,2,3,6,0],
filter: 'sort'
}
Вы можете играть с ним в этом jsFiddle: http://jsfiddle.net/xmojmr/jkb7ry9x/1/
То, как (1) является безопасным и достаточно быстро, но это предполагает, что вы знаете, список разрешенных пользовательских фильтры впереди
способ (2) дикие, небезопасная и медленнее, но позволяет использование любого предоставленного пользователем выражения фильтра
Что вы хотите создать? Как бы выглядел сгенерированный html? BTW: вы можете использовать [{% if ..%}] (http://mozilla.github.io/nunjucks/templating.html#if), чтобы разветвить код. – xmojmr
@xmojmr Я хочу, чтобы в соответствии с циклом данных HTML.And я могу настроить, чтобы добавить конфигурацию фильтра. Теперь я не знаю, как написать фильтр (| data.filter будет жаловаться) – user2632323