2017-05-12 13 views
3

は以前、私のルートは定義されていました:Ember.jsでインデックスルートを定義する必要があるのはなぜですか?

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

私はそれを変更:これは正常に動作します

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

。しかし、router.jsにインデックスを明示的に定義しない限り、私のusername/indexルートはロードされません。

次のようになるない作品:

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

はこの正常な動作ですか?

+0

を助け

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

希望:私のようなルートhttps://ember-twiddle.com/c310013f69c086cecaa38b1d355c49f3?openFiles=templates.username.hbs%2C&route=%2Fusername私は通常はしません索引ルートを使用し、より具体的に名前を付けてください。 – sheriffderek

答えて

3

routeがネストされている場合、routeは、親のルートがであるとみなされます。 https://guides.emberjs.com/v2.13.0/routing/defining-your-routes/#toc_index-routes

特に、キーフレーズである:これはガイドで、このことをいう(最上位レベルを含む)ネストの各レベルで

、エンバーは自動的にインデックス名前/パスの経路を提供します。新しいレベルのネスティングが発生したときを確認するには、ルーターを確認して、機能が表示されたらいつでも新しいレベルにしてください。

roomusername内にネストされているのでだから、あなたの例では、その後、usernameは自動indexルートを取得します。ネストからroomを削除した場合、デフォルトのindexルートはusernameになりました。

参考までにインデックスルートを指定する必要はなく、空のコールバックを提供するだけです。例えば:

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

これは自動的にusername/indexルートを作成することによって、同じように動作します。私の初期エンバーのアプリ(1.1)の一つで

は、私は関係なく、(一貫性のため)、常にそこにインデックスルートを望んでいたので、私は、変数を定義した:

var NO_CHILDREN= function() {}; 

その後、私は書くことができますたぶん、あなたはこのような例を示すことができ

+2

それは非常に面白く、私が期待していたものではありません。ありがとう、この答えは私の理解を広げました(そして将来的には他の人もそうです)! –

関連する問題