2017-03-13 8 views
0

Ich habe begonnen, mit der Spotify-API als eine persönliche Lernübung zu spielen und begann mit dem Anfänger-Tutorial.Erlaubt Handlebars.js dynamische Vorlagen?

Der angegebene Beispielcode verwendet lenker.js für Vorlagen, und ich denke, es ist ziemlich cool. Wie auch immer, ich kann keinen Weg finden, das zu tun, was ich erreichen möchte.

Dies ist meine Vorlage

<script id="recently-played-template" type="text/x-handlebars-template"> 

    <div class=""> 
     <dl class="dl-horizontal"> 
     <h3> Recently Played </h3> 

    <p>{{items.0.track.artists.0.name}} - {{items.0.track.name}}</p> 

     </dl> 
    </div> 
    </div> 
</script> 

ich den folgenden Aufruf an die Spotify-API tue. Bei Erfolg wird es die Vorlage mit den JSON-Antwortdaten füllen, die dann in einem Platzhalter div gesetzt werden den Benutzer

 $.ajax({ 
      url: 'https://api.spotify.com/v1/me/player/recently-played', 
      headers: { 
       'Authorization': 'Bearer ' + access_token 
      }, 
      success: function(response) { 
       recentlyPlayedPlaceholder.innerHTML = recentlyPlayedTemplate(response); 


       $('#login').hide(); 
       $('#loggedin').show(); 
      } 
     }); 

SO die Daten anzuzeigen, was ich versuche, herauszufinden, wie zu tun ist, um meine Vorlage zu bauen in einer Weise, die darauf basiert, wie viele Spuren zurückgegeben werden.

Nehmen wir an, ein Benutzer hat spotify in einer Woche nicht verwendet und hört dann 3 Lieder. dann möchte ich 3 Lieder angezeigt bekommen.

wenn sie 10 hörten, möchte ich 10 angezeigt.

Ich bin mir einfach nicht sicher, wie man die Vorlage dynamisch macht.

Ich brauche nicht die direkte Antwort nur einen Stoß in die richtige Richtung. Jede Hilfe ist apprecaited.

+0

Nichts sagt Sie dies in einer _single_ Vorlage Erweiterung zu tun haben - vielleicht müssen Sie für jede Spur eine pro-Track-Vorlage erweitern, verketten die, und dann für die volle div Inhalt das Ergebnis in eine Vorlage setzen? – barny

Antwort

1

Ich gehe davon aus, dass Ihr Code ohne Fehler funktioniert. Entfernen Sie <p>{{items.0.track.artists.0.name}} - {{items.0.track.name}}</p> und versuchen Sie den folgenden Code.

{{#each items}} 
    <li>{{track.name}}</li> 
    {{/each}} 
+0

funktioniert perfekt. Kannst du mir sagen, wie das geht? Ist das etwas, das für lenker.js spezifisch ist? – TonyO

+0

Ich denke ich verstehe jetzt. Es ist eine für jede Schleife, die für eine Menge von 'Elementen' in der JSON-Antwort ausgeführt wird. Ich verstehe die Syntax einfach nicht. Ich habe #acheinander und/noch nie zuvor gesehen. – TonyO

+0

Ja, du hast Recht. Es ist etwas spezifisch für Lenker. Es funktioniert wie ein für jede Schleife. Weitere Informationen finden Sie unter diesem Link [Lenker eingebaute Helfer] (http://handlebarsjs.com/builtin_helpers.html) –