如何将带有参数的Meteor Spacebars helper传递给另一个帮助器属性?

时间:2015-09-14 09:53:58

标签: meteor meteor-blaze spacebars meteor-helper

大家:)例如我有这样的事情:

{{> someCoolHelper
 someParam1='someVal1'
 someParam2='someVal2'
 someParam3='SomeVal3'
 someParam4=someAnotherHelper 'value param to this helper'
}}

所以我有一个函数,根据可以在其中传递的参数计算一些值。那我怎么能这样做呢?

2 个答案:

答案 0 :(得分:0)

在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");
  }
});

答案 1 :(得分:0)

您可以使用括号将帮助程序的输出传递给另一个帮助程序。相当确定这是您要追求的: http://blazejs.org/guide/spacebars.html#Calling-helpers-with-arguments

  

您还可以将帮助程序的输出传递给模板包含项或其他帮助程序。为此,请使用括号显示优先级:

{{> 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")}}