【发布时间】:2015-01-14 12:24:02
【问题描述】:
我试图弄清楚如何将路线转换为模式,以便您可以通过任何其他路线导航到它,同时保留底层(以前的)模板。
例如:
http://example.com/site/index 转到 index.hbs
http://example.com/site/page2 转到 page2.hbs
http://example.com/site/article/1234 如果用户来自另一个域,则转到 article.hbs(重新开始)
但是如果用户来到任何其他路线,http://example.com/site/article/1234 在“article-modal”出口内打开 article.hbs。
这里是 router.js
Market.Router.map(function() {
this.route('index', { path: '/' });
this.route('start', { path: 'start' });
this.route('article', { path: 'article/:article_id' });
this.route('404', { path: '*:' });
});
这里是 application.hbs
<div class="main-container">{{outlet}}</div>
{{outlet "article-modal"}}
这里是 article.js 路由 另一种情况 #1
Em.Route.extend({
beforeModel: function(transition, queryParams) {
if(!Em.isEmpty(this.controllerFor('application').get('currentRouteName'))) {
this.render('article', {
into: 'application',
outlet: 'article-modal'
});
return Em.RSVP.reject('ARTICLE-MODAL');
}
},
model: function(params) {
return this.store.find('article', params.id);
},
actions: {
error: function(reason) {
if(Em.isEqual(reason, 'ARTICLE-MODAL')) { // ARTICLE-MODAL errors are acceptable/consumed
//
return false;
}
return true;
}
}
});
这里是 article.js 路由 另一种情况 #2
Em.Route.extend({
renderTemplate: function() {
if(!Em.isEmpty(this.controllerFor('application').get('currentRouteName'))) {
this.render({into: 'index', outlet: 'article-modal'});
} else {
this.render({into: 'application'});
}
},
model: function(params) {
return this.store.find('product', params.id);
},
});
案例#1 的问题是浏览器地址栏不反映当前路由。如果用户从索引路由转到文章路由,浏览器地址栏仍会显示 /index.. 所以如果他按下返回按钮应用程序会中断。
案例 #2 的问题是它丢弃了 index.hbs 的内容,因为文章路由没有嵌套。
Ember 甚至可以拥有这样的功能吗?
谢谢:)
【问题讨论】:
标签: ember.js ember-router