2017-05-01 1 views
1

Ich habe ein Ember-Projekt (v2.12.0), wo ich ein bestimmtes Modell anhand seines Slugs finden möchte. Diese Schnecken sollen einzigartig sein.EmberJS: Wirf 404 vom Routenmodell-Hook, wenn die Speicherabfrage zu einer leeren Sammlung führt

Wenn ich nach einem Datensatz mit Ember.store.query() abfrage, wird das zurückgegebene Versprechen jedoch immer zu einer Auflistung von der Natur von query() und der JSON-API-Spezifikation aufgelöst.

Wenn der Server einen Datensatz mit diesem bestimmten Slug nicht findet, lautet die Antwort weiterhin 200 OK mit einer leeren Auflistung für my-model[] als seine Nutzlast.

Meine Frage ist:

Wie kann ich model() Haken in meine glut Route besten behaupten, dass die Sammlung genau 1 Element enthält, oder abbrechen und Übergang zu einer sonst 404 Route/Seite?

Dies ist der Code, den ich habe bisher:

import Ember from 'ember'; 

export default Ember.Route.extend({ 

model(params) { 

    return this.store.query('my-model', { 
     filter: { 
      slug: params.myModelSlug 
     } 
    }).then((modelCollection) => { 

     // Code below fails when modelCollection is empty... 
     return modelCollection.get('firstObject'); 

     if (modelCollection.get('length') === 0) { 
      // Throw new Ember Error 404? 
     } 
    }); 
} 
}); 

Antwort

0

Das ist nichts, was Sie in Ihrer Route tun sollten! Das ist ein Job für den Adapter! Nicht vergessen queryRecord. Das ist die Methode, die Sie von Ihrer Route aus anrufen sollten. Der Rest ist viel schöner im Adapter.

Sie können dies jedoch in der Route tun. Das Wichtigste ist, über error substates zu wissen. Just throw "foo", oder implementieren Sie Ihr eigenes Fehlerobjekt. Als Nächstes zeigen Sie die 404-Nachricht im Fehler-Unterzustand an.

Verwandte Themen