2016-10-26 3 views
0

Wirklich neu zu ember und versuchen, grundlegende (in meinen Gedanken) Routen einzurichten.EmberJS 2 Route dynamisches Segment in nicht verschachtelten Routen undefined

Ich habe calendars Ressource und ich möchte einzelne Kalender anzeigen.

Mein app/router.js hat folgendes:

this.route('calendar', {path: 'calendars/:calendar_id'}, function() { 
    this.route('show'); 
    this.route('edit'); 
}); 
this.route('calendars', function(){ 
    this.route('create'); 
}); 

Ordner sind wie folgt:

app/routes: [ 
    calendars: [create, index], 
    calendar: [edit, show] 
] 
app/templates: [ 
    calendars: [create, index] 
    calendar: [edit, show] 
] 

In app/routes/calendar/show.js:

import Ember from 'ember'; 
export default Ember.Route.extend({ 
    model(params) { 
     return this.store.findRecord('calendar', params.calendar_id); 
    } 
}); 

Die Probleme beginnen, wenn ich gehe zu http://SERVER/calendars/5/show (5 a : kalender_id teil, SERVER ist was hosts ember app):

  • , wenn ich log params - sie sind nicht definiert
  • In dev Werkzeuge, die ich sehe, dass Ember irgendwie eine POST-Anforderung als http://SERVER/calendars/5 zu meinem Server macht (a : calendar_id Teil ist SERVER auf derselben Domain und wo mein Backend liegt).
  • Dies geschieht unabhängig davon, ob ich model() Funktion in app/routes/calendar/show.js Datei auskommentieren.
  • Anscheinend Ember weiß, was calendar_id für diese Anfrage zu verwenden.
  • Aber ich weiß nicht, wo das Aufruf an den Server passiert:

    • Wenn ich model(){} ganz auf Kommentar, meine Vorlage Modell Rekord macht (den Kalender Datensatz, den Ember holt).
    • Wenn ich auf der anderen Seite versuchen params in model() loggt und ich kommentieren Sie this.store.findRecord Teil aus, die params sind nicht definiert und es löst einen Fehler.
  • Ich dachte zuerst, dass es mein DS.RESTAdapter ist, da ich update Änderungen zu fälschen PUT-Anforderung definiert habe (mein Server erlaubt nicht, dass), aber ich aus der gesamten Datei kommentiert und es immer noch diese Abfrage .

  • Ich habe gereinigt beide dist/, tmp/, auf 2.9.0 aktualisiert haben, aber es hat die gleiche Sache.
  • Ich habe keine Controller

definiert Wie Ember POST-Anforderung machen, wenn Modell() Haken aus Route fehlt, ich habe keine difined Controller. Wie repariere ich es auch, damit es funktioniert?; P

bearbeiten [2]:

ich das jetzt bin versucht, und ich denke, es irgendwie funktioniert, aber sieht hässlich aus:

this.route('calendars',{ path: '/calendars'}, function(){ 
    this.route('create'); 
}); 
this.route('calendar', { path: '/' }, function() { 
    this.route('show', { path: '/calendars/:calendar_id/show' }); 
    this.route('edit', { path: '/calendars/:calendar_id/edit' }); 
}); 
this.route('index', { path: ''}); 

Antwort

1

Ember intelligent genug, um eine Standard-Route zu erzeugen, wenn Sie erstellen keine und ein Standardmodell, wenn Sie keine Modellfunktion erstellen.

Dies geschieht basierend auf dem Namen der Route, dh wenn Ihre Route "Kalender" ist, generiert sie eine Modellfunktion basierend auf dem "Kalender" -Modell.

Versuchen explizit Ihre Route Pfad mit den Parametern wie pro ember docs definieren: https://guides.emberjs.com/v2.9.0/routing/defining-your-routes/

this.route('calendar', function() { 
    this.route('show', { path: '/:calendar_id/show' }); 
    this.route('edit', { path: '/:calendar_id/edit' }); 
    this.route('create'); 
}); 
+0

ich sehe. Ich habe aber schon 'app/models/calendar.js' definiert. Ich habe jedoch keinen Controller definiert. Wenn Sie dieses Setup versuchen, suchen Sie nach der Konfiguration von "/ calendar /: calendar_id /: calendar_id/show". Das Entfernen von '/: calendar_id' bringt mich zum selben Problem zurück. – GogromaT

+0

Um es zu verdeutlichen erzeugt die Modellfunktion in der Route NICHT das Modell selbst –

+0

Ich bearbeitet das Beispiel, um den Pfad von der übergeordneten Route zu entfernen, so dass sie jetzt nur in den verschachtelten Routen sind –

Verwandte Themen