2013-07-08 55 views
7

如何從另一個幫助程序中調用一個句柄塊幫助程序。從另一個幫助程序調用一個句柄塊幫助程序

我有興趣在綁定幫助器中轉換以下內容。

{{#each link in sideMenuLinks}} 
     <li class="navigation page"> 
      {{#linkTo ROUTE_VARIABLE link.linkToRouteContext}} 
       {{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a> 
      {{/linkTo}} 
     </li> 
    {{/each}} 

注意,我得叫{{#linkTo}}助手裏面塊,並與從屬性link.linkToRoute的值更改ROUTE_VARIABLE。

回答

2

灰燼把手幫手放在Ember.Handlebars.helpers。您可以撥打電話Ember.Handlebars.helpers.{helperName}.call

但是,上面看起來像一個動態的局部/視圖樣式助手。我會建議爲它創建一個Handlebars View助手。語法相似,但您將View類傳遞到helper

Ember.Handlebars.helper('sideMenuLinks', App.SideMenuLinksView); 

相應的視圖可以使用類似你這樣的模板,通過給予templateName

App.SideMenuLinksView = Ember.View.extend({ 
    templateName: 'sideMenuLinksTemplate' 
    }); 

您的模板會是這樣的,

<script type='text/x-handlebars' data-template-name='sideMenuLinksTemplate'> 
    {{#each link in view.links}} 
     <li class="navigation page"> 
      {{#linkFor parentView.routeVariable link.linkToRouteContext}} 
       {{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a> 
      {{/linkFor}} 
     </li> 
    {{/each}}  
</script> 

默認灰燼linkTo是靜態的,在您無法從變量傳遞指定的路由。您將需要一個動態linkTo幫手,如linkFor,它在內部應用linkTo之前查找 之前的可變路徑。

Ember.Handlebars.registerHelper('linkFor', function(path, params, options) { 
    var view = options.data.view; 
    var name = view.get(path); 
    var args = [name, params, options]; 

    return Ember.Handlebars.helpers.linkTo.apply(this, args); 
    }); 

最後你可以像下面這樣使用這個助手。在這個例子中,links屬性將被綁定到控制器的content

<script type='text/x-handlebars' data-template-name='application'> 
    {{sideMenuLinks links=content routeVariable='page'}} 
</script> 

這是一個工作jsbin

+1

顯然這不起作用了,試圖用燼氣和不成功 –

+0

你成功了嗎?我遇到了同樣的問題。 – julkiewicz