2016-11-03 1 views
0

je charge des enregistrements dans mon magasin dans l'itinéraire d'index:Ember magasin: Trier, filtrer Rechercher des enregistrements

model: function(){ 
    return Ember.RSVP.hash({ 
     cars: this.store.query('car',{}).then(function(data){ 

     }) 
    }); 
} 

Je poursuis ma route voiture peekAll (pas de demande de réseau) et obtenir tous les enregistrements de voiture :

model: function() { 
    return Ember.RSVP.hash({ 
     cars: this.store.peekAll('car').sortBy('name') 
    }); 
} 

Vous remarquerez que je peux utiliser « sortBy » pour trier les enregistrements en fonction du champ dans le magasin db.

Ce que je ne comprends pas, c'est comment filtrer ou trouver des documents dans le magasin? Par exemple, si je voulais faire les choses suivantes:

  • Trier tous les enregistrements de voiture par nom, puis filtrer/trouver les voitures il ne retourne que les voitures acheté l'année 1998 ou plus tard
  • Filtrer les enregistrements , donc je n'affiche que les voitures qui sont 'Jaguars'
  • Retour seulement un maximum de 10 enregistrements, même si le magasin a plus de 10 enregistrements.

J'ai regardé dans findBy et filterBy, mais la documentation semble un peu défaut avec des détails sur la façon de mettre en œuvre avec des exemples.

Répondre

2

D'abord, si vous passez {} à .query(), vous devriez probablement utiliser findAll.

Et vous pouvez simplement utiliser filter:

this.store.peekAll('car') 
    .filter(car => car.get('year') >= 1998) 
    .sortBy('name') 
    .slice(0, 10); 

filterBy est si vous souhaitez filtrer sur une valeur spécifique. Donc, si vous voulez que tous les car s avec le year1998:

this.store.peekAll('car') 
    .filterBy('year', '1998');