首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不影响URL的一组Ember路由的布局

不影响URL的一组Ember路由的布局
EN

Stack Overflow用户
提问于 2014-11-06 15:54:18
回答 1查看 86关注 0票数 1

假设我有以下路由器:

代码语言:javascript
运行
复制
Router.map(function() {
  this.route('intro');
  this.route('about');
  this.route('terms-of-use');
});

我想做的是在不修改路径的情况下为路由aboutterms-of-use创建一个父模板,如下所示:

代码语言:javascript
运行
复制
Router.map(function() {
  this.route('intro');
  this.route('some-layout', /* zero length path options */) {
    this.route('about');
    this.route('terms-of-use');
  }
});

我正在考虑在ApplicationController上放置一个标志,并在application模板中使用它来显示intro和其他路由的不同内容。但这会造成一些混乱。

然后,可以为aboutterms-of-use使用自定义基本路由类,并使用模拟父模板的overriden renderTemplate。但这看起来也不太好,模板嵌套的配置将扩展到整个应用程序。

在路由器中这样做似乎是最理想的,但有可能吗?

我目前的解决方案是ApplicationController上的这个标志

代码语言:javascript
运行
复制
anotherLayout: function() {
  return ['about', 'terms-of-use'].indexOf(this.currentRouteName) !== -1;
}.property('currentRouteName')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-11 17:07:00

不幸的是,您无法定义一个没有URL的路由(当您执行{ path: '/' }时,您可以定义它,但只定义一次--这很可能不会)

好消息是您可以为aboutterms-of-use指定视图类。

代码语言:javascript
运行
复制
App.AboutView = App.TermsOfUseView = Ember.View.extend({
  layoutName: 'some-layout'
});

然后是带有一个some-layout助手的{{yield}}手柄模板,如下所示:

代码语言:javascript
运行
复制
<div class="some-layout">
  {{yield}}
</div>

下面是它的工作原理:当Ember呈现一个路由的模板时,它首先检查是否存在一个视图类。如果是这样的话,它将设置它的template属性。因为我们使用layout属性,所以不会覆盖它。不是很完美,因为它不会是这些路线的真正家长,但在大多数情况下,它做的工作。

此外,我认为Ember会支持您描述的功能,因为它确实很有意义,而且我知道很多人都因为缺乏它而受苦(包括我)。

更多关于布局的信息:http://emberjs.com/guides/views/adding-layouts-to-views/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26783705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档