2017-01-29 3 views
1

Ich bin ziemlich neu in der EmberJS, also bitte helfen Sie mir zu verstehen und mein Problem zu lösen.Wie man ausgewählten Wert zwischen den Routen übergeben

Das ist mein Modell: book.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    title: DS.attr('string'), 
    author: DS.attr('string'), 
    picture: DS.attr('string'), 
    buyer: DS.attr('string'), 
    bought: DS.attr('boolean', { defaultValue: false }), 
    createdAt: DS.attr('date', { defaultValue() { return new Date(); } }) 
}); 

Ich habe die folgende Route: Books.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model: function(){ 
     return this.store.findAll('book'); 
    } 
}); 

und ein wenig von books.hbs entsprechenden

{{#each model as |book|}} 
     <div class="book-container col-xs-12 col-sm-6 col-md-4"> 
      <div class="card"> 
       <div class="wrapper"> 
        <div class="details col-md-12"> 
         <h3 class="product-title">Title {{book.title}}</h3> 
         <p class="product-description">Author:{{book.author}}</p> 
         {{#link-to 'books.give' }} Buy {{/link-to}} 
        </div> 
       </div> 
      </div> 
     </div> 
{{/each}} 

Dieser Code gibt alle Bücher zurück, die ich momentan in der App gespeichert habe.

Die Idee ist, erhalten ausgewählte Book Objekt aus books.hbs und es in give.hbs anzuzeigen.

Ich wollte diese Linie

von books.hbs Einzeln ein einziges Buch passiert

{{#link-to 'books.give' }} Buy {{/link-to}}

verwenden zu give.hbs, aber ich weiß nicht, wie das zu tun, und wenn es ist die Art und Weise zu gehen ..

In gift.hbs erfand ich teilweise ein sehr ineffizienter Weg, es zu tun alle Bücher wieder durch Looping und wenn der Titel ein Spiel ist es dann angezeigt ...

{{#each model as |book|}} 
    {{#if (eq book.title "Harry Potter")}} 
     <h2><b>{{book.title}}</b></h2> 
    {{/if}} 
    {{/each}} 

Offensichtlich ist der „Harry Potter“ string ist hart codiert, aber es könnte von books.hbs bestanden, und das würde den Trick tun, da meine Daten relativ klein ist.

Wenn irgendein Ember.js Guru mir den richtigen Weg zeigen könnte, würde das sehr geschätzt werden.

Dank

Antwort

1

Es hängt davon ab, wie wollen Sie URL darzustellen.
wenn es books/give/bookId => dann gehen für dynamic segments
wenn seine books/give?bookId=1 => dann gehen für query params Implementierung

Innerhalb books.give Route erhalten die besondere Buch Rekord mit findRecord und verwenden.

+1

Dank @kumkanillam für eine Idee, um dies zu lösen. Ich habe den Weg mit dynamischen Segmenten gewählt. Ich habe ein bisschen die Namensgebung durcheinander gebracht, anstatt "geben" sollte ich "Buch" verwenden. Das Problem war, dass ich bereits eine Buchroute hatte, mit der ich neue Datensätze erstellte. –

+0

Vielleicht können Sie 'give' route verwenden und es einem anderen Pfad zuordnen, etwa' this.route ('give', {path: '/: book_id'}) '. Sie können mit [AlexSpeller route diagonal] spielen (http://alexspeller.com/ember-diagonal/route/post). Lassen Sie es mich wissen, wenn Sie Probleme bei der Verwendung dynamischer Segmente feststellen. – kumkanillam

+0

Meine Routen sind jetzt in Ordnung. AlexSpellers Website war sehr hilfreich. Alles funktioniert perfekt. Die letzte Frage ist, wie rufe ich mein Objekt in gift.hbs auf? Ich habe versucht, book.title, aber immer noch keinen Erfolg –

Verwandte Themen