# 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
annual_fee'并且属于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}}'部分。您可以看到的助手来自swag collection of Handlebars helpers。遗憾的是,帮助程序不解析属性,因此property.symbol
成为字符串。
这是:
Handlebars.registerHelper 'is', (value, test, options) ->
if value is test then options.fn(@) else options.inverse(@)
我认为这是可能的,但with the right helper - 不知道哪一个。
我想避免的是采用像if isYourSavings
这样的计算属性。
答案 0 :(得分:6)
我不确定您的代码的上下文,但似乎您正在寻找带有块帮助程序的registerBoundHelper
。这不受支持。你会遇到这个警告,
断言失败:registerBoundHelper生成的助手不支持与Handlebars块一起使用。
执行您正在执行的操作的另一种方法是使用视图助手。视图助手就像一个助手,但可以使用自定义模板进行渲染。
例如,CardItemView
将是
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
中完成。