0

この単純な JavaScript 構成を考えると、次のようになります。

var MyObject = function() {
  var privateArray = [
    { name: 'one' },
    { name: 'two' }
  ];
  this.returnPrivate = function(index) {
    return privateArray[index];  
  };
};
var obj = new MyObject();

ハンドルバー テンプレート内で、関数を使用しnameて特定のインデックスでオブジェクトのプロパティを出力できるようにしたいと考えています。privateArrayreturnPrivate

// This of course does not work.
<p>{{returnPrivate(1).name}}</p>

私は handlebars.js を使い始めたばかりなので、これを行う標準的な方法が既にあるかもしれません。または、これはテンプレートにあまりにも多くのロジックを構築しようとしていて、ハンドルバーのすべてに反している可能性があります.

4

2 に答える 2

0

ハンドルバーには、ここで説明されているように、数値または記号の識別子を処理するための特別な構文があります。配列インデックスをリテラルとして渡すことができる場合は、次を使用できます。

{{privateArray.[1].name}}

これは、オブジェクトを再構築privateArrayしてテンプレートで使用できるようにする場合にのみ機能します。privateArrayテンプレートを非表示にして強制的に関数呼び出しを使用させたい場合は、ヘルパーを使用する必要があります。

于 2013-09-25T19:27:40.857 に答える
0

必要なことを行うヘルパーを思いつきましたが、これがハンドルバーに関するこの種の問題を解決する最善の方法であるかどうかについて、フィードバックをいただければ幸いです。

/**
 * 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>
于 2012-06-14T19:27:28.223 に答える