Позабавившись с парой идей, я думаю, что я придумал разумное решение, которое не нарушает (слишком много) раздельное зрения и логики.
Во-первых, чтобы сделать фактическую конкатенации, я сделал concat
помощника:
// Takes any number of arguments and returns them concatenated.
UI.registerHelper('concat', function() {
return Array.prototype.slice.call(arguments, 0, -1).join('');
});
Пример использования:
{{ concat "a" "b" "c" }}
{{! output: "abc" }}
Затем я сделал новый блок помощника, withResult
:
Помощник:
UI.registerHelper('withResult', function() {
Template._withResult.helpers({result: this.valueOf()});
return Template._withResult;
});
Шаблон:
<template name="_withResult">
{{> UI.contentBlock result=result}}
</template>
Пример использования:
{{#withResult concat "a" "b" "c"}}
{{> alert message=result}}
{{/withResult}}
В основном, он принимает результат все, что блок вызова (в данном случае, CONCAT) и помещает его в переменной result
доступны для шаблон.
Я думаю, что это довольно чистый и гибкий способ не только concat, но и для получения других простых значений с несколькими параметрами. Единственный минус на этом этапе - это только позволяет создать одну переменную (поскольку каждая область помещает ее в одно и то же место). Однако это можно преодолеть, если другие помощники возвращают объекты.
Конечно, это то, что вы не хотите злоупотреблять, так как это размывает чистую линию, которую мы пытаемся сохранить между представлением и логикой.
Вы пробовали '{{> alert message =" Записан как: "+ currentUser.username}}'? – tomsp
Я верю, что сделал, и моя IDE (последняя веб-версия) сказала, что это ошибка ... хотя я действительно не знаю, проверил ли я, действительно ли сам Метеор сказал, что это ошибка или нет. – samanime
Я только что протестировал это, и это действительно вызывает ошибку. – samanime