2013-07-08 14 views
7

Wie kann ich einen Lenkerblockhelfer von einem anderen Helfer in ember anrufen.Aufruf eines Lenkstangenblockhelfers von einem anderen Helfer

Ich bin daran interessiert, die folgenden in einem gebundenen Helfer zu konvertieren.

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

Bitte beachte, dass ich einen {{#linkTo}} Block innerhalb der Helfer rufen und auch ROUTE_VARIABLE mit einem Wert aus der Eigenschaft link.linkToRoute ändern.

Antwort

2

Die Ember-Lenker-Helfer sind unter Ember.Handlebars.helpers platziert. Sie können sie mit Ember.Handlebars.helpers.{helperName}.call anrufen.

Allerdings sieht das obige wie ein dynamischer Teil-/Ansichtsstilhelfer aus. Ich würde vorschlagen, einen Handlebars View-Helfer dafür zu erstellen. Die Syntax ist ähnlich, aber Sie übergeben eine View-Klasse an die helper.

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

Die entsprechende Ansicht einer Vorlage ähnlich wie bei Ihnen, indem sie eine templateName

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

Sie Vorlage wäre verwenden können so etwas wie,

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

Der Standard Ember linkTo ist statisch, In dass Sie die benannte Route nicht von einer Variablen übergeben können. Sie benötigen einen dynamischen linkTo Helfer wie die linkFor, die den Variablenpfad vor nachschlägt, der intern linkTo anwendet.

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); 
    }); 

Schließlich können Sie diesen Helfer wie unten verwenden. Die links-Eigenschaft wird in diesem Beispiel an die content des Controllers gebunden.

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

Hier ist eine funktionierende jsbin.

+1

anscheinend funktioniert das nicht mehr, versuchen Sie es mit ember-cli und keinen Erfolg –

+0

Haben Sie Erfolg? Ich stieß auf das gleiche Problem. – julkiewicz

Verwandte Themen