質問

私はhandlebars.jsテンプレートエンジンと協力しており、このようなことをする方法を見つけようとしています(考慮された例):

{{#if itemSelected "SomeItem"}}
    <div>This was selected</div>
{{/if}

どこ itemSelected このような登録ヘルパーです。

Handlebars.registerHelper("itemSelected", function(item) {
    var selected = false;
    // Lots of logic that determines if item is selected
    return selected;
});

この構文をテンプレートに使用しようとするとエラーが発生し、この種のことを示す例が見つかりません。このような単純な#ifブロックが見えます...

{{#if myValueInContext}}
    <div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}

しかし、最初の例に取り組む方法を理解することはできません。多分私はこれを間違っています。

ちなみに、質問にハンドルバーのタグを追加できなかったため、この口ひげにタグを付けました。

役に立ちましたか?

解決

これがうまくいくとは思わない。ハンドルバーのドキュメントが正しいことを理解している場合、#IFは登録されたブロックヘルパー自体であり、別の登録ヘルパーを引数として受け取らない。

ドキュメントによると、あなたはそれをそのように実装するかもしれません


Handlebars.registerHelper('ifItemSelected', function(item, block) {
  var selected = false;
  // lots of logic that determines if item is selected

  if(selected) {
    return block(this);
  }
});

その後、あなたはそれをで呼ぶことができるはずです


{{#ifItemSelected SomeItem}}
    This was selected
{{/ifItemSelected}

しかし、あなたは確かにしなければなりません someitem 適切な形式があります。登録済みハンドラーをIFステートメントの条件として使用する方法はありません。

他のヒント

埋め込みヘルパーの呼び出しの周りに括弧を追加する必要があります。

{{#if (itemSelected "SomeItem")}}
    <div>This was selected</div>
{{/if}

私は実験を行い、それが機能することを確認しました。

ハンドルバーのドキュメントで言及されているかどうかはわかりません。の例からトリックを学びました ハンドルバーレイアウト.

ハンドルバーの最後のバージョン(1.0.RC.1)を使用すると、次のようなSTHを書く必要があります。

Handlebars.registerHelper('ifItemSelected', function(item, options) {
  var selected = false;
  // lots of logic that determines if item is selected

  if (selected) {
    return options.fn(this);
  }
});

すなわち。 ブロック(これ) に置き換えられます options.fn(this)

http://handlebarsjs.com/block_helpers.html#conditionals

他のオプションも必要な場合は、このコードが必要になります。

Handlebars.registerHelper('ifItemSelected', function(item, options) {
  var selected = false;
  // lots of logic that determines if item is selected

  if (selected) {
    return options.fn(this);
  }
  else {
   return options.inverse(this);
 }
});

使用:

{{#ifItemSelected SomeItem}}
    This was selected
{{else}}
    This was not selected
{{/ifItemSelected}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top