【问题标题】:Retrieving Private Array Data in Handlebars.js Template在 Handlebars.js 模板中检索私有数组数据
【发布时间】:2012-06-14 19:27:27
【问题描述】:

鉴于这个简单的 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>

我刚开始使用handlebars.js,所以可能已经有一个标准的方法来做这件事。或者这可能是试图在模板中构建过多的逻辑,并违背了车把的全部意义。

【问题讨论】:

    标签: javascript handlebars.js information-hiding


    【解决方案1】:

    我想出了一个帮手,它可以做我需要的事情,但我非常感谢一些反馈,看看这是否是解决 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>
    

    【讨论】:

      【解决方案2】:

      Handlebars 具有处理数字或符号标识符的特殊语法as described here。如果您能够将数组索引作为文字传递,则可以使用以下内容:

      {{privateArray.[1].name}}
      

      仅当您重组对象以使privateArray 可用于模板时才有效。如果你真的想隐藏privateArray并强制模板使用函数调用,那么你必须使用一个助手。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-08
        • 2013-08-31
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多