2013-03-05 8 views
8
<script type="text/x-handlebars" data-template-name="patient"> 
    <ul class="nav"> 
    {{#each menuItem in menuItems}} 
     <li>{{#linkTo "dashboard.summary" menuItem}}{{menuItem.name}}{{/linkTo}}</li> 
    {{/each}} 
    </ul> 
    {{outlet}} 
</script> 

In dem obigen Code, wie mache ich linkTo eine dynamische Verbindung anstelle der hardcoded "dashboard.summary"? Zum Beispiel "dashboard."+menuItem.name.Wie mache ich linkTo dynamisch in ember?

+0

Ich glaube nicht, das ist möglich, aber man sollte nicht über einen separaten Weg für jedes Modell sowieso benötigen. Können Sie genauer erklären, was Sie erreichen möchten? – ahmacleod

+0

Ich habe eine Liste von Menüeinträgen, die ich aus der DB geholt habe, entsprechend jedem Menüpunkt. Ich möchte eine andere Route. Die Menüpunkte sind Zusammenfassung Ergebnisse Meds Bestellungen vsio Notizen Demo Besuche. Beim Klicken auf jeden von ihnen bin ich zu einem anderen Bildschirm – Swapnil

Antwort

7

Sie könnten einen einfachen Lenker-Helfer registrieren, der den linkTo Helfer hüllt.

var linkTo = Ember.Handlebars.helpers.linkTo; 
Ember.Handlebars.registerHelper('myLinkTo', function(name, suffixPath) { 
    var suffix = Ember.Handlebars.get(this, suffixPath);  
    arguments = [].slice.call(arguments, 2); 
    arguments.unshift(name + '.' + suffix); 

    return linkTo.apply(this, arguments); 
}); 

Dann in Ihrer Vorlage könnten Sie schreiben:

{{#each menuItems}} 
    <li>{{#myLinkTo "dashboard" name this}}{{name}}{{/myLinkTo}}</li> 
{{/each}} 

Der Helfer wird das zweite Argument lösen und es an den ersten anhängen, durch einen Punkt voraus.

Edit: Dieses Verhalten kann jetzt ohne einen benutzerdefinierten Helfer erreicht werden. Siehe c4p's answer für die zeitgemäße Lösung dieses Problems. Die obige Lösung wurde zuletzt mit Ember 1.0.0-rc.1 getestet.

+0

Hallo .. seine Arbeit .. @ Ahmadelod Vielen Dank für die Hilfe ... :) – Swapnil

+0

Hallo, habe ich versucht, aber ich habe eine Ausnahme: Uncaught [Objekt Objekt] am Lenker-1.0.0-rc.4.js: 707 Welche Handelsbars und Ember-Version verwenden Sie? – Sobis

+0

wo sind die Argumente, die in der slice.call kommen? Wie konvertieren Sie dies zu ember-cli/es6? – NullVoxPopuli

13

In der aktuellen Ember (1.10 ab diesem Post) akzeptieren Helfer jetzt sowohl in Anführungszeichen gesetzte Argumente als auch Argumente, die im aktuellen Kontext als Attribute nachgeschlagen werden. Ich glaube, das wurde in Ember 1.2 geändert (change log).

Wenn zitiert, wird das Argument als String verwendet werden:

{{#link-to 'post'}}Posts{{/link-to}} 

Wenn nicht angegeben, wird das Argument in dem aktuellen Kontext nachgeschlagen werden:

{{#link-to routeName}}Go To '{{routeName}}'{{/link-to}} 

Dies wird ein Link sein -to zeigt auf was auch immer die routeName -Eigenschaft ist. Dies kann dynamisch aktualisiert werden.

Hier ist ein Beispiel JSBin dies in Aktion zeigt: http://emberjs.jsbin.com/nelafep/1/edit?html,css,js,output

+1

Wissen Sie zufällig, wie Sie Parameter dynamisch übergeben können? –

+1

Dies ist die aktuellste Antwort. – sheriffderek

+0

Hinweis (Ember 2,16 an dieser Stelle), das ist gut: '{{# link-to (concat baseRoute" .edit ") Modell}} Bearbeiten {{link-to}}' – charneykaye

Verwandte Themen