从Handlebars helper中的模板获取值

时间:2014-04-11 15:10:48

标签: javascript handlebars.js

我正在使用Handlebars作为我的模板。有没有办法使用帮助程序正在使用的模板中的值?

重要的是给定值是一个字符串,后来是值。

示例:

// Template.html
<p>{{myHelper 'This is an awsome {name}'}}</p>

Helper.js
Handlebars.registerHelper('myHelper', function(string){

 // string is 'This is an awsome {name}' AND it is important that {name} is a string and at this point not the real value

 var myNewString = string.replace(\{name}\, Handlebars.getValueByKey(name));
 return myNewString

});

如果名称是&#34;测试&#34;返回的值将是这是一个很棒的测试

name的值在此模板的另一个Helper中给出,其中定义了&#34; name&#34;是&#34;测试&#34;作为一个字符串。

我正在寻找像我在我的例子中使用的功能 - getValueByKey

有一种典型的方法吗?我在官方文档中没有找到这样的东西。

编辑:对不起 - 我不知道为什么代码框中的示例看起来像这样。

2 个答案:

答案 0 :(得分:2)

你很亲密。关键是准确传递你想要的模板:

// Template.html
<p>{{myHelper 'This is an awesome' name}}</p>

Helper.js
Handlebars.registerHelper('myHelper', function(string, name){

  // string is 'This is an awesome'
  // value of {name} is passed as another value
  // If you wanted to do other things with the {name} you could
  // do that in the function below

  var myNewString = string + name;
  return myNewString

});

希望更接近你想要的东西。

答案 1 :(得分:1)

通常,您只需设置一个通用助手,它将返回您需要的任何值。但是你需要在帮助器中传入你想要的值。如果您需要多个,只需按名称传递额外值即可。例如

<p>My name is {{name}}</p>
<p>My Phone number is {{phonenumber}}</p>
<p>My Address is {{address}}</p>
<p>The length of all three are {{stringLength name phonenumber address}}</p>

Handlebars.registerHelper('stringLength', function(name, phonenumber, address) {
    var retVal = name + phonenumber + address;
    return new Handlebars.SafeString(retVal.length);
});