有没有办法让我不在Emberjs中扩展应用程序模板?因为我有一条路线,网址需要/questions
用于搜索引擎优化目的,但它的设计与所有其他网页完全不同。所以我不希望它继承应用程序模板。这可能吗?
答案 0 :(得分:0)
你有两个我能想到的选择。第一个是评论中提出的:为questions
和其他所有内容创建单独的顶级路由:
// templates/application.js
{{outlet}}
// templates/questions.js
{{! whatever you want for the questions template }}
// templates/base.js
{{! base template stuff, headers, nav bars, content, etc. }}
// router.js
Router.map({
this.route('questions');
this.resource('base', function() {
this.route('base1');
....
});
});
这将导致/base/base1
形式的路由的注释不正确。使用this.resource
,路由的格式为/base1
。
还有另一种方法可能满足您的需求。它涉及在应用程序模板中放置一个自定义插座,可以通过子路径填充。然后为"常规路线"定义一个超类。它定义了一个renderTemplate
,它将标题重新放入该出口。
// templates/application.js
{{outlet name='header'}}
{{outlet name='main'}}
// mixins/normal-route.js
renderTemplate() {
this.render('header', {
outlet: 'header'
});
}
// router.js
Router.map({
this.route('questions');
this.route('base1');
});
// pods/base1/route.js
export default NormalRoute.extend({...
这样做的好处是可以让应用程序模板更具可读性。和语义,因为它明确地表明它由一个(可能的)标题部分组成,填充在一些其他组件中,以及一个" main"部分。