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除了来自控制器的计算属性之外,所有内容都来自。symbol' field is underscored like年费',属于CreditCardProperty. 每个卡片类别都有不同的卡片属性集。只有两个类别有属性(类别有许多卡片属性),一个记录的computed字段设置为true。这意味着模板应该查找相应的控制器。

由于symbol(例如age_to_apply)与CreditCard字段之一(ageToApply)相关,我所能想到的就是使用cardProperty在上下文()中获取当前卡this并解析的助手property.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}}”部分。您可以看到的 helper 来自Handlebars helpers 的 swag 集合。不幸的是,助手没有解析属性,所以它property.symbol变成了一个字符串。

这里是:

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

我认为这是可能的,但有合适的助手——不过不知道是哪一个。

我想要避免的是求助于计算属性,如if isYourSavings.

4

1 回答 1

6

我不确定您的代码的上下文,但似乎您正在寻找registerBoundHelper一个块助手。这不受支持。你会遇到这个警告,

断言失败:registerBoundHelper 生成的助手不支持与 Handlebars 块一起使用。

做你正在做的事情的另一种方法是使用视图助手。视图助手类似于助手,但可以使用自定义模板进行渲染。

例如 aCardItemView将是,

App.CardItemView = Em.View.extend({
  templateName: 'cardItemTemplate'
});

Em.Handlebars.registerHelper('cardItem', App.CardItemView);

在哪里cardItemTemplate

<script type='text/x-handlebars' data-template-name='cardItemTemplate'>
  {{#if view.property.symbol}}
    <td class="td">{{yourSavings}}</td>
  {{else}}
    <td class="td">{{cardProperty view.property.symbol}}</td>
  {{/if}}
</script>

你可以像这样使用助手,

{{#with controllers.currentCardCategory}}
  {{#each property in cardProperties}}
    {{cardItem property=property etc}}
  {{/each}}
{{/with}}

您可以传入任意数量的属性作为属性。这些将绑定到CardItemView. 由于它是一个视图,因此视图所做的任何事情,例如自定义计算属性,都可以在CardItemView.

于 2013-08-02T14:19:03.807 回答