在恩伯我可以用这个:
App.Router.map(function() {
this.route('accomodations');
});
所以,如果进入/住宿,它将加载该视图。
我还可以添加:
App.Router.map(function() {
this.route('accomodations', { path: '/travel' });
});
所以,如果进入/旅行,它将进入相同的视图。
我希望能够/住宿和/旅行去同一个视图吗?这有可能吗?
我知道这个:
App.Router.map(function() {
this.route('accomodations');
this.route('accomodations', { path: '/travel' });
});
我会做什么,但如果他们去住宿,它应该显示在网址中,它总是显示旅行。我甚至不确定最后一段代码是否是最佳实践。
答案 0 :(得分:5)
您可以简单地交换两个路径路径定义行:
App.Router.map(function() {
this.route('accomodations', { path: '/travel' });
this.route('accomodations');
});
最后一个定义优先考虑{{link-to ...'accomodations'}}
和Route#transitionTo('accomodations')
应用内转换中的网址显示,但是通过' / travel'进入应用程序将保留原样的URL。
( EmberJS 1.11.3,2.12.2)
答案 1 :(得分:1)
在router.js
App.Router.map(function() {
this.route('accomodations');
this.route('travel');
});
在routes/travel.js
App.TravelRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('accomodations');
},
});
您不必将这些文件放在单独的文件中(这就是我要放在哪里)。
这样做是用路由器注册两条路由。选择其中一个作为"主要"路线,另一个"别名"路线。在这种情况下,accomodation
是主要路由,travel
是其别名。当用户访问/travel
时,他们会被重定向到/accomodation
。
这将是默认/标准的Ember方式来实现这一点,如果这听起来不错,那就去吧。
如果您不希望重定向发生,由于某种原因,并希望用户看到的URL保持不变,但仍然显示相同的内容,并且行为方式相同,这也是可能的。
在这种情况下,您将创建每个Ember单元中的两个(路径,控制器,视图,模板)。聪明的方法是创建一个基类路由,让App.TravelRoute
和App.AccomodationRoute
平均扩展它;创建一个基类控制器,让App.TravelController
和App.AccomodationController
平均扩展它;对于观点也是如此,如果你有的话。
模板,OTOH,有点棘手,因为没有办法扩展它们(我知道)。那么你需要做的是创建一个部分或一个组件(决定哪个更适合你),然后在templates/accomodation.hbs
和templates/travel.hbs
中重用那个部分/组件