2017-02-02 3 views
0

Ich entwickle Suchfunktion in meiner App. Was ich versuche, ist ein Auto nach Marken zu filtern. Ich habe folgendes in meiner Route:Filtern von Daten mit Parametern in Ember

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    actions: { 
     filterCars(car){ 
      this.transitionTo('cars',{ queryParams: {brand: car}}); 
     } 
    }, 
    queryParams: { 
    brand: { 
     refreshModel: true 
    } 
    }, 
    model(params) { 
     if(params['marca'] != null){ 
      this.get('store').query('car', { filter: { brand: params['marca'] } }).then(function(cars) { 
       return cars; 
      }); 
     } else { 
      return this.get('store').findAll('car'); 
     } 
    } 
}); 

Als ich die Marke von params, ich filtern, um nur die Autos mit dieser bestimmten Marke. Ich dachte, es würde funktionieren, aber es funktioniert nicht. Irgendeine Idee von dem, was ich falsch mache?

+0

was 'params [ 'marca']'? sollte es nicht 'params ['brand'] 'sein? – Lux

+0

Ja. es ist params ['Marke']. Aber es ist nicht das Problem. Es ist die Marke, die ich als Get-Parameter sende. – andrefurquin

+1

Dann ist dieser Code korrekt und sollte funktionieren. Vielleicht kannst du mehr Infos darüber geben, was nicht funktioniert? Erhalten Sie einen Fehler? Was ist los? hast du versucht, dich in einem 'ember-twiddle' zu ​​reproduzieren? Welche Anfragen werden an Ihren Server gesendet und sind Ihre Serverantworten korrekt? – Lux

Antwort

0

Was ist das Symptom Ihres Problems?

Ich habe festgestellt, dass Ihr model Hook eine if-Anweisung mit zwei Zweigen hat, aber nur einer von ihnen (der else-Zweig) führt dazu, dass die Funktion einen Wert zurückgibt. Der Zweig if löst eine Zusage, tut aber nichts damit.

Auch: ist der Code, den Sie für die Autos Route zeigen? Sie können diese Seite möglicherweise vereinfachen, indem Sie einfach den Parameter brand ändern. Ich bin mir nicht sicher, ob Sie überhaupt auf die gleiche Route wechseln müssen.

+0

"return this.get ('Store'). FindAll ('Auto');" gibt ein Versprechen für sicher und es funktioniert. Wie würde ich dann ein Versprechen im else Block zurückgeben? – andrefurquin

+0

Sie schon. Es ist der 'if'-Block, der kein Versprechen zurückgibt. Es sollte lauten: so etwas wie 'return this.get ('speichern') query ('auto', {filter: {marke: params ['marca']}});' – abought

+0

es gibt immer noch alle Autos zurück, anstatt nur die ich suche .. – andrefurquin

0

Verwendung where-Klausel in Filter

 

    import Ember from 'ember'; 
    export default Ember.Route.extend({ 
     actions: { 
      filterCars(car){ 
       this.transitionTo('cars',{ queryParams: {brand: car}}); 
      } 
     }, 
     queryParams:{ 
      brand:{ 
       refreshModel: true 
      } 
     }, 
     model(params) { 
      if(params['marca'] != null){ 
       this.get('store').query('car', { filter: { where:{brand: params['marca'] } }}).then(function(cars) { 
        return cars; 
       }); 
      } else { 
       return this.get('store').findAll('car'); 
      } 
     } 
    });