Как передать помощник 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 - таких ограничений у вас не будет.

Другие вопросы по тегам