2017-05-12 3 views
3

Bisher wurden meine Routen definiert:Warum muss ich eine Indexroute in Ember.js definieren?

this.route('username', { 
    path: '/:username' 
}, function() { 
    this.route("room", { 
    path: "/:room", 
}); 

habe ich es zu:

this.route('username', { 
    path: '/:username' 
    }, function() { 
    this.route('index') 
}); 
this.route("room", { 
    path: "/:room" 
}); 

Dies funktioniert gut. Aber meine username/index Route wird nicht geladen, außer ich definiere explizit den Index in router.js.

Im Folgenden wird nicht Arbeit:

this.route('username', { 
    path: '/:username' 
}); 
this.route("room", { 
    path: "/:room", 
}); 

Ist das ein normales Verhalten?

+0

Vielleicht hilft Ihnen ein Beispiel, wie diese zeigen: https://ember-twiddle.com/c310013f69c086cecaa38b1d355c49f3?openFiles=templates.username.hbs%2C&route=%2Fusername Normalerweise nicht Verwenden Sie die Indexrouten und benennen Sie sie stattdessen genauer. – sheriffderek

Antwort

3

Wenn ein route verschachtelt wurde route s, wird angenommen, dass es eine index Route für die Eltern gibt. Dies bezieht sich auf diese in der Führung: https://guides.emberjs.com/v2.13.0/routing/defining-your-routes/#toc_index-routes

Insbesondere das Schlüsselwort ist:

auf jeder Ebene der Verschachtelung (einschließlich der obersten Ebene), Ember stellt automatisch eine Route für den/path benannten Index . Um zu sehen, wann eine neue Ebene der Verschachtelung auftritt, überprüfen Sie den Router, wenn Sie eine Funktion sehen, das ist eine neue Ebene.

Also, in Ihrem Beispiel, weil room innerhalb username verschachtelt ist, dann bekommt username eine automatische index Route. Wenn Sie aus der Verschachtelung entfernt haben, ist die Standard-Route index für username weggegangen.

FYI, Sie müssen nicht einmal die Indexroute angeben, liefern Sie einfach einen leeren Rückruf. z.B .:

this.route('username', { 
    path: '/:username' 
    }, function() {}); 

Dies wird durch die automatische Erstellung der username/index Weg auf die gleiche Weise arbeiten.

In einem meiner frühen Ember apps (1.x), wollte ich der Index Route immer dort sein, unabhängig (Konsistenz), so definiert ich eine Variable:

var NO_CHILDREN= function() {}; 

Dann könnte ich schreiben meine Routen wie:

this.route('username', { 
    path: '/:username' 
    }, NO_CHILDREN); 

Hoffnung, die

+2

Das ist sehr interessant, und nicht das, was ich erwartet hätte. Danke, diese Antwort hat mein Verständnis erweitert (und hoffentlich das von anderen in der Zukunft)! –

Verwandte Themen