Как передать помощник Meteor Spacebars с параметром в другой атрибут помощника?
Все:) Например, у меня есть что-то вроде этого:
{{> someCoolHelper
someParam1='someVal1'
someParam2='someVal2'
someParam3='SomeVal3'
someParam4=someAnotherHelper 'value param to this helper'
}}
Так что у меня есть функция, которая вычисляет некоторое значение в зависимости от параметра, который может быть передан в нем. Так как я могу это сделать?
2 ответа
Заполнитель до тех пор, пока в Spacebars не появятся подвыражения шаблона, состоит в создании помощника, возвращающего адекватное значение в JS:
HTML
{{> myTemplate param1="A" param2=param2}}
JS
function someOtherHelper(param){
console.log(param);
}
Template.registerHelper("someOtherHelper", someOtherHelper);
Template.myTemplate.helpers({
param2: function(){
return someOtherHelper("B");
}
});
Вы можете передать вывод помощника другому помощнику, используя круглые скобки. Совершенно уверен, что это именно то, что вам нужно:http://blazejs.org/guide/spacebars.html
Вы также можете передать вывод помощника включению шаблона или другому помощнику. Для этого используйте круглые скобки, чтобы показать приоритет:
{{> Todos_item (todoArgs todo)}}
Здесь задача передается в качестве аргумента помощнику todoArgs, затем вывод передается в шаблон Todos_item.
Что-то, что я сделал в недавнем проекте, использует эту функциональность, чтобы разрешить условную визуализацию классов CSS для компонента (урезано для краткости):
# global helper to provide ternary operator
Template.registerHelper('ternary', (condition, resultTrue, resultFalse) => {
return condition ? resultTrue : resultFalse
})
# in my-template.js:
Template.My_template.helpers({
isComplete(score) {
return score === 1
}
})
# in my-template.html:
{{> some_component class=(ternary (isComplete this.score) "green" "red")}}
Как вы можете прочитать в ветке форума на метеорном форуме, сейчас это невозможно в пробелах.
Мы начали с нового пакета для цепочки методов и аргументов, но он еще не выпущен. Что вы могли бы сделать, это использовать WITH
элемент как
Вместо этого что-то вроде:
{{> someCoolHelper
someParam1='someVal1'
someParam2='someVal2'
someParam3='SomeVal3'
someParam4=someAnotherHelper 'value param to this helper'
}}
может управляться:
{{#with someAnotherHelper 'value param to this helper' }}
{{> someCoolHelper
someParam1='someVal1'
someParam2='someVal2'
someParam3='SomeVal3'
someParam4=this
}}
{{/with}}
Мне это не нравится, но иногда необходимо
Том
PS: Или отбросьте пробелы и используйте React - таких ограничений у вас не будет.