2013-07-08 14 views
7

Come posso chiamare un helper del blocco manubri da un altro helper in ambra.Chiamata al blocco di manubri helper da un altro assistente

Sono interessato a convertire quanto segue in un helper associato.

{{#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}} 

Nota che dovrò chiamare un {{}} #linkTo blocco all'interno del helper e cambiarne anche ROUTE_VARIABLE con un valore dal link.linkToRoute proprietà.

risposta

2

Gli aiutanti manubri Ember sono posizionati a Ember.Handlebars.helpers. Puoi chiamarli con Ember.Handlebars.helpers.{helperName}.call.

Tuttavia, quanto sopra è simile a un helper di stile parziale/dinamico. Suggerirei di creare un helper di Handlebars View per questo. La sintassi è simile ma si passa in una classe View allo helper.

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

la vista corrispondente possibile utilizzare un modello simile al tuo dando un templateName

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

Si modello sarebbe qualcosa di simile,

<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> 

L'Ember linkTo predefinito è statica, in che non è possibile passare la rotta indicata da una variabile. Avrai bisogno di un helper dinamico linkTo come lo linkFor che ricerca il percorso della variabile prima dello applicando internamente lo 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); 
    }); 

Finalmente puoi usare questo aiutante come di seguito. La proprietà links sarà associata allo content del controller in questo esempio.

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

Ecco un lavoro jsbin.

+1

a quanto pare questo non funziona più, cercando di farlo utilizzando ember-cli e senza successo –

+0

Ci sei riuscito? Ho incontrato lo stesso problema. – julkiewicz

Problemi correlati