2014-04-11 72 views
0

我正在使用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 

}); 

如果是“测试”的返回值将是这是一个要命的测试

name的值在另一个助手给出了这个模板,其中将“name”定义为“Test”作为字符串。

我要寻找一个功能类似于我在我的例子中使用 - getValueByKey

有没有做到这一点的典型方式是什么?在官方文档中我没有找到类似的东西。

编辑:我很抱歉 - 我不知道为什么在代码框中的例子看起来像这样。

+0

why getValueByKey?你只是想返回你传递的任何价值的长度? – ckross01

+0

这只是一个例子 - 我真正的handlebars-helper不返回字符串的长度,但需要获取模板中返回的字符串的值 – TJR

回答

0

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

<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); 
}); 
+0

我的例子很糟糕 - 对不起。重要的是我只给了一个字符串。一个更好的例子是:{{myHelper'我的名字是{name}'}}重要的是我的帮手得到字符串“我的名字是{name}”,然后从助手中的“name”不是之前。 – TJR

+0

我编辑了一下这个例子。也许现在清楚我正在寻找什么样的解决方案。 – TJR

1

你很近。关键在于准确传递您想要的模板:

// 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 

}); 

希望这与您所寻找的更接近。