Javascript 在handlebar.js模板中检索私有数组数据

Javascript 在handlebar.js模板中检索私有数组数据,javascript,handlebars.js,information-hiding,Javascript,Handlebars.js,Information Hiding,考虑到这种简单的JavaScript结构: var MyObject = function() { var privateArray = [ { name: 'one' }, { name: 'two' } ]; this.returnPrivate = function(index) { return privateArray[index]; }; }; var obj = new MyObject(); 在把手模板中,我希望能够使用returnP

考虑到这种简单的JavaScript结构:

var MyObject = function() {
  var privateArray = [
    { name: 'one' },
    { name: 'two' }
  ];
  this.returnPrivate = function(index) {
    return privateArray[index];  
  };
};
var obj = new MyObject();
在把手模板中,我希望能够使用
returnPrivate
功能在
privateArray
的特定索引处打印对象的
name
属性

// This of course does not work.
<p>{{returnPrivate(1).name}}</p>
//这当然不行。
{{returnPrivate(1.name}}


我刚开始使用handlebar.js,所以可能已经有了一种标准的方法。或者,这可能是试图在模板中构建太多的逻辑,并与把手的功能背道而驰。

我已经找到了一个帮助器,可以满足我的需要,但我非常希望得到一些反馈,以确定这是否是解决把手这类问题的最佳方法

/**
 * 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>
{{eqf returnPrivate 1“name”}


车把有一种特殊的语法,用于处理数字或符号标识符。如果能够将数组索引作为文本传递,则可以使用以下方法:

{{privateArray.[1].name}}
只有重新构造对象,使
privateArray
可用于模板时,此方法才有效。如果确实要隐藏
privateArray
并强制模板使用函数调用,则必须使用助手