Javascript 不扩展应用程序模板
我有没有办法不在Emberjs中扩展应用程序模板?正如在我有一个路径,url需要是Javascript 不扩展应用程序模板,javascript,ember.js,ember-cli,Javascript,Ember.js,Ember Cli,我有没有办法不在Emberjs中扩展应用程序模板?正如在我有一个路径,url需要是/questions,用于SEO目的,但它的设计与所有其他页面完全不同。所以我不希望它继承应用程序模板。这可能吗?你有两个选择,我可以考虑。第一个是在评论中提出的:为问题和其他所有问题创建单独的顶级路线: // templates/application.js {{outlet}} // templates/questions.js {{! whatever you want for the questions
/questions
,用于SEO目的,但它的设计与所有其他页面完全不同。所以我不希望它继承应用程序模板。这可能吗?你有两个选择,我可以考虑。第一个是在评论中提出的:为问题
和其他所有问题创建单独的顶级路线:
// 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({...
这样做的好处是允许应用程序模板更具“可读性”和语义,因为它明确显示了它由(可能的)标题部分(填充了一些其他组件)和“主”部分组成。您不能在应用程序模板中放入任何内容,然后把剩下的路由放在基础路由或其他东西下面更深一层。@Kingpin2k是的,但这会影响url。它最终将成为
/base route/questions
而不仅仅是/questions
我是说,将基本路线用于其他所有内容,这样,应用程序模板中任何您想要显示的内容都将在那里完成,但在访问/questions
@三个重音不正确,如果questions
被定义为资源,我会按照@Kingpin2k的建议,简单地在基本路径上设置{path:'/',resetNamespace:true}
。