2013-08-01 63 views
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 annual_fee',屬於CreditCardProperty。每個卡類別具有不同的卡屬性組。只有兩個類別具有屬性(類別具有許多卡屬性),並且一條記錄的computed字段設置爲true。這意味着模板應該查找相應的控制器。定製Handlebars幫手 - 參數未解決

作爲symbol(例如age_to_apply)涉及信用卡式的一個字段(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這樣的計算屬性。

回答

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中完成。

+2

謝謝!有用!我在你的示例代碼中做了一些小修改。希望你不介意。 :) – wryrych