鉴于这个简单的JavaScript构造:
var MyObject = function() {
var privateArray = [
{ name: 'one' },
{ name: 'two' }
];
this.returnPrivate = function(index) {
return privateArray[index];
};
};
var obj = new MyObject();
在手柄模板中,我希望能够使用name
函数在privateArray
的特定索引处打印对象的returnPrivate
属性。
// This of course does not work.
<p>{{returnPrivate(1).name}}</p>
我刚开始使用handlebars.js,所以可能已经有了一种标准的方法。或者这可能是试图在模板中构建过多的逻辑并且反对什么把手。
答案 0 :(得分:0)
我已经找到了一个帮我做了我需要的东西,但是我非常感谢一些反馈是否这是用Handlebars解决这类问题的最好方法。
/**
* Given the name of a function that returns an array value, this helper
* returns the value at a given index. Optionally it takes a property name
* in case the array value at the given index is itself an object.
*/
Handlebars.registerHelper('eqf', function(func, index, prop) {
if (typeof prop === 'string') {
return func(index)[prop];
} else {
return func(index);
}
});
问题示例的用法:
<p>{{eqf returnPrivate 1 "name"}}</p>
答案 1 :(得分:0)
Handlebars具有处理数字或符号标识符as described here的特殊语法。如果能够将数组索引作为文字传递,则可以使用以下命令:
{{privateArray.[1].name}}
仅在重组对象以使privateArray
可用于模板时才有效。如果你真的想要隐藏privateArray
并强制模板使用函数调用,那么你必须使用帮助器。