2015-04-23 4 views
3

Я знаю, как это сделать с помощью более расширенного и, вероятно, «правильного» метода, но мне было интересно, есть ли более простые способы сделать это.Meteor/Blaze - Простая строка конкатената в параметре

{{> alert message="My message"}} 

В принципе, у меня есть шаблон, который принимает значение message. Я хочу дать ему сообщение Logged in as: samanime, где samanime - это то, что значение currentUser.username.

Я знаю, что могу сделать это, создав помощника, чтобы объединить две части для меня, но есть ли способ, которым я могу это сделать без дополнительного помощника? Может быть что-то вроде:

{{> alert message="Logged in as: ${currentUser.username}"}} 
+0

Вы пробовали '{{> alert message =" Записан как: "+ currentUser.username}}'? – tomsp

+0

Я верю, что сделал, и моя IDE (последняя веб-версия) сказала, что это ошибка ... хотя я действительно не знаю, проверил ли я, действительно ли сам Метеор сказал, что это ошибка или нет. – samanime

+0

Я только что протестировал это, и это действительно вызывает ошибку. – samanime

ответ

5

Позабавившись с парой идей, я думаю, что я придумал разумное решение, которое не нарушает (слишком много) раздельное зрения и логики.

Во-первых, чтобы сделать фактическую конкатенации, я сделал 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, но и для получения других простых значений с несколькими параметрами. Единственный минус на этом этапе - это только позволяет создать одну переменную (поскольку каждая область помещает ее в одно и то же место). Однако это можно преодолеть, если другие помощники возвращают объекты.

Конечно, это то, что вы не хотите злоупотреблять, так как это размывает чистую линию, которую мы пытаемся сохранить между представлением и логикой.

 Смежные вопросы

  • Нет связанных вопросов^_^