4
# here is CreditCards controller context
{{#with controllers.currentCardCategory}}
  {{#each property in cardProperties}}
    {{#is property.symbol 'your_savings'}}
      <td class="td">{{yourSavings}}</td>
    {{else}}
      <td class="td">{{cardProperty this property.symbol}}</td>
    {{/is}}
  {{/each}}
{{/with}}

テーブルを動的に作成します。すべてのコンテンツはArrayController、コントローラーから取得される計算されたプロパティである 1 つを除いて取得されます。symbol' field is underscored like年会費' に属しCreditCardPropertyます。各カード カテゴリには、異なる一連のカード プロパティがあります。2 つのカテゴリのみがプロパティを持ち (カテゴリには多くのカード プロパティがあります)、1 つのレコードにはcomputedフィールドが に設定されていtrueます。つまり、テンプレートは対応するコントローラーを検索する必要があります。

( age_to_applysymbolなど) は CreditCard フィールド ( ) の 1 つに関連しているため、コンテキスト ( ) で現在のカードを取得して解決するヘルパーageToApplyを使用することしかわかりませんでした。cardPropertythisproperty.symbol

camelizedProperty = categoryProperty.camelize()
card.get 'camelizedProperty'

理想的には、ヘルパーなしでやりたいのですが、次のように使用します。

# *** {{property.symbol}} should look up this context
#     and become e.g {{annual_fee}} or {{annualFee}} - is it possible?
{{#with controllers.currentCardCategory}}
  {{#each property in cardProperties}}
    <td class="td">{{property.symbol}}***</td>
  {{/each}}
{{/with}}

しかし問題は、その '{{yourSavings}}' の部分をレンダリングする方法がわからないことです。表示されるヘルパーは、ハンドルバー ヘルパーのスワッグ コレクションから取得されます。残念ながら、ヘルパーはプロパティを解決しないためproperty.symbol、文字列になります。

ここにあります:

Handlebars.registerHelper 'is', (value, test, options) ->
  if value is test then options.fn(@) else options.inverse(@)

それは可能だと思いますが、適切なヘルパーがあれば- ただし、どれかわかりません。

私が避けたいのは、のような計算されたプロパティに頼ることですif isYourSavings

4

1 に答える 1