web-dev-qa-db-ja.com

Meteor + Blaze-If elseステートメント

これを見て Blazeを使用 ガイド、Blazeは{{#if}}および{{else}}ステートメントですが、if-elseステートメントの例を見たことはありません。これはBlazeでサポートされていますか?または、elseブロック内で追加のifブロックを実行する必要がありますか?.

私は試した {{else if}}、ただしエラーが発生しました。

{{#if en}}{{text.en}}{{else if tc}}{{text.tc}}{{/if}}
26
dayuloli

スペースバーは handlebars と同じ制御フロー構造を使用するため、答えは this one と同じです。あなたの場合:

{{#if en}}
  {{text.en}}
{{else}}
  {{#if tc}}
    {{text.tc}}
  {{/if}}
{{/if}}

サイドノート- jade の素晴らしい点の1つは、else if


ロジックを次のようなヘルパーに移動する方が良い場合もあります。

Template.myTemplate.helpers({
  textValue: function() {
    if (this.en) {
      return this.text.tc;
    } else if (this.tc) {
      return this.text.tc;
    }
  }
});
<template name="myTemplate">
  <p>{{textValue}}</p>
</template>
55
David Weldon

@David Wheldonの優れた回答に続いて、BlazeテンプレートからJavaScriptヘルパー関数にパラメーターを渡すことができることも注目に値します。

したがって、たとえば、以下のコードは、isSelected region customerCompany行でヘルパーメソッドを呼び出すことにより、選択リストのオプションを選択的にレンダリングします。

    {{#if isSelected region customerCompany}}
        <option value={{region._id}} selected>{{region.name}}</option>
    {{else}}
        <option value={{region._id}}>{{region.name}}</option>
    {{/if}}

そして、jsファイルで:

isSelected: function (region, customer) {

    return customer.salesRegionId === region._id;
},

変数をヘルパーに渡すこのアプローチは、テンプレートを使用するときにthisキーワードの意味の変化に伴う混乱を避けるために一般的に推奨されます。

4
tomRedox

現在のバージョンのBlazeは、else ifをサポートしています-サンプル形式およびgithub問題解決への参照については、以下を参照してください。

{{#if isUserProfile}}
    <h3>User Profile</h3>
{{else if isLawyerProfile}}
    <h3>Lawyer Profile</h3>
{{else}}
    <h3>Test</h3>
{{/if}}

参照リンク: GitHub Else If Issue Resoltion

1
Mike