- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以用外行的术语解释嵌套 socket 在 ember 模板中的工作方式吗?
特别是尝试从文档中理解这一点:
http://emberjs.com/guides/routing/rendering-a-template/
"The immediate parent route did not render into the main outlet ..."
This means that the current route tried to render into the parent route's template, but the parent route didn't render a template, or, if it did, that the template which the parent route provided did not render into the main template (i.e., a default {{outlet}}).
App.Router.map(function() {
this.resource('libraries', function() {
this.route('new');
this.resource('library', {path: ':library_id'}, function() {
this.resource('books', function() {
this.route('new');
this.resource('book', {path: ':book_id'}, function() {
this.resource('pages', function() {
this.route('new');
this.resource('page', {path: ':page_id'}, function() {
}); // Page
}); // Pages
}); // Book
}); // Books
}); // Library
}); // Libraries
}); // map
最佳答案
一般来说,大多数模板语言都提供了一些包装 target
的方法。将页面内容转换为主要布局。这允许将公共(public)页面布局分离到另一个文件中,并将较小的目标模板分离到另一个文件中。
在 Ember 中已经有一些这样的迭代,目前这个功能是由 {{outlet}}
提供的。 helper 。奥特莱斯是 Ember 的途径 yield
成一个布局。
所在区域outlet
明显偏离 yield
正在嵌套。在服务器端生成要简单得多。您只需要标记模板的区域以进入,然后调用将内容块生成到指定的目标中。
但是,当内容的呈现切换到客户端 javascript 时,仅页面的一部分会按需更新。您不能再简单地yield
直接进入标记。您需要更智能的 yield
即:- outlet
.{{outlet}}
有两个方面.
{{outlet}}
helper 。 render
renderTemplate
里面使用的方法钩。 {{outlet}}
不需要名字。这使它成为该模板的默认 socket 。模板中可以有许多这样的导出,它们可以通过给它一个名字来指定。例如:-
{{outlet 'sidebar'}}
{{outlet 'nav'}}
render
完成的。在
renderTemplate
钩子(Hook)
Route
.
outlet
来完成此操作。传递给
render
的散列中的选项方法作为选项。
renderTemplate() {
this.render('recentPosts', { outlet: 'sidebar' });
}
recentPosts
将被渲染到其父模板中名为“侧边栏”的导出中。
application
达到模板。
resource
时与
this.resource('posts');
在
Router
,您是根据惯例指出一些事情。
posts
带有布局模板的路线 posts
. posts.index
带模板的路由posts/index
. posts
模板包含所有帖子通用的布局及其子资源。至少它必须至少包含一个默认 socket ,如
{{outlet}}
.
{{outlet}}
子路由不会有直接的父导出来渲染。然后他们将在该父级的父级或最终呈现
application
模板的导出。发生这种情况时,您将看到
"The immediate parent route did not render into the main outlet ..."
警告。检查您的
outlets
的位置当这个情况发生时。
posts.index
是给所有具有嵌套路由的资源的隐式路由。换句话说,如果你的资源有嵌套路由,你不需要显式声明一个嵌套的,
this.route('index
)`。
index
route 可以显示该资源的内容。例如,对于
posts.index
, 可以显示所有
posts
的列表.此隐式路由的一个次要警告是模型位于父级
posts
上。路线。您必须使用
needs
api 在
PostsIndexController
中获得此模型.
needs: ['posts'],
contentBinding: 'controller.posts'
posts.index
路线是可选的。您可以从
posts/index
放置 UI用于显示帖子列表,直接进入
posts
模板本身。然而,这意味着任何子资源也将与帖子列表一起呈现,并与
posts
中的导出一起呈现。 .是否使用显式索引路由取决于需要显示的 UI。
application
模板。它必须有一个
outlet
用于呈现嵌套资源,并且通常会包含页面通用的布局。如果您未指定应用程序模板,则将使用默认模板。这个生成的模板相当于
{{outlet}}
, 即:- 一个只有默认 socket 的模板。
App.Router.map(function() {
this.resource('posts', function() {
this.route('new')
this.resource('post', {path: ':post_id'}, function() {
this.resource('comments', function() {
this.route('new');
});
});
});
});
posts.new
将被渲染为
posts
这将在
posts
内呈现,它将被渲染成
application
模板的默认 socket 。下面列出了其余使用的模板。
+---------------------------+--------------------------------------------------------+
| Route | Templates used (default outlets) |
+---------------------------+--------------------------------------------------------+
| posts.index | posts.index > posts > application |
+---------------------------+--------------------------------------------------------+
| posts.new | posts.new > posts > application |
+---------------------------+--------------------------------------------------------+
| posts.post.index | post.index > post > posts > application |
+---------------------------+--------------------------------------------------------+
| posts.post.new | post.new > post > posts > application |
+---------------------------+--------------------------------------------------------+
| posts.post.comments.index | comments.index > comments > post > posts > application |
+---------------------------+--------------------------------------------------------+
| posts.post.comments.new | comments.new > comments > post > posts > application |
+---------------------------+--------------------------------------------------------+
into
来更改此默认模板层次结构。
render
的选项方法。
renderTemplate: function() {
this.render('posts', { into: 'sidebar' })
}
posts
模板将渲染到
sidebar
的默认 socket 中模板。
Outlet
是另一个 ember 概念,它使用大量约定而不是配置。默认设置非常好,同时易于自定义。
关于ember.js - Ember JS 和 Ember Rails 中的嵌套路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17662791/
我正在尝试将 ember-models 链接到 ember-table,以从服务器提取分页记录,并在向下滚动时将它们添加到表中。 我可以通过请求我的 api url 和页码来让它工作,就像 http:
我有一个应用程序,它使用 ember-data 来持久化数据和 StateManager 来驱动其全局状态。由于加载数据是异步的,我想知道如何捕获表示所有数据都已加载的事件。 准确地说,我有一个名为“
我有一个简单的 Ember 应用程序,其中有一个输入框、两个选择框和一个按钮。我可以在“doSearch”方法中访问输入框的值,但不能访问选择框的值。 到目前为止,我没有尝试任何工作 - 我注释掉了我
我使用 Ember-CLI 来构建我的 ember 应用程序,但我不想使用 Ember Data。 默认情况下,当你输入这个命令:ember generate model Person 时,ember
我按照 Ember CLI 主页的说明创建了我的第一个 Ember CLI 插件。该插件运行良好,并且已经在 Github 上获得了几颗星:https://github.com/lolmaus/emb
我在这里看到的以前的问题似乎都没有涵盖何时使用 Ember 计算属性与 Ember Observer 的主题。我知道计算属性使用以前的属性来帮助生成新属性并在运行循环中更新。 Person = Emb
我一直在 git 分支上切换到 1.13.2 版本的 ember,现在我想在返回另一个分支时回到 1.11.1。 我一直在运行npm install和 bower install没有失败。 但是当我运
我有一个使用 ember-cli 构建的 Ember 应用程序我正在使用 ember-qunit 编写我的测试使用 testem 测试适配器并在浏览器中运行它们按照 ember-cli 中的说明文档。
项目设置: Ember:2.0.0 Ember 数据:2.0.0 Ember-cli:1.13.8 我创建了一个转换:转换/isodate.js import DS from 'ember-data'
假设我有一个具有 2 个属性的组件:我如何能够基于 localID 属性和 Ember.compulated.filterBy 宏创建计算属性? localID: 2, data: [ { i
我刚刚创建了一个新的 Ember-CLI app (v0.1.12),并注意到 Ember 的引用版本是 v1.8.1 (bower.json)。我想要 recently released 1.10我
使用最新的 Ember (3.2)、ember-cli-mirage 0.4.7、ember-cli-qunit 4.3.2、ember-qunit 3.4.1 我正在使用 ember-cli-mir
我是一名 ember 菜鸟,正在阅读 ember-cli 101 这本书。迄今为止,我一直在 ember-cli 网站 here 上使用升级工作流程。 。 在终端中使用 ember-cli 帮助时,我
如何测试我的组件,将 ember-data 模型作为 props 传递给它? 例如: {{#queue/review/moderatable-text model=activity property=
Ember 对象和 Ember Data 中的对象有什么区别?我知道当服务器上有一些数据时我应该使用 Ember Data 模型,但是我应该何时何地使用它们中的任何一个? 最佳答案 注意:这很长,有偏
执行ember -v仅显示ember cli版本。 如何查看 ember.js 版本和 ember 数据版本? 最佳答案 ember.js 和 ember-data 的版本由应用的依赖项决定。 Bow
我正在尝试在 Ember.RSVP.all 内执行 promise App.Foo = Ember.Object.create({ bar: function() { var
访问 ember 对象属性的首选方法是什么?我经常看到 .get() 方法被使用,但想知道为什么人们不只是使用点表示法。例如在 Advice in the Use of Ember Trek 先生写道
我知道 Ember 有一个记录器,但我想创建自己的用于学习目的。我有一个名为 logger 的服务,我希望能够在任何地方使用这个服务。将此服务注入(inject)到组件、 Controller 等中没
我刚刚关注了 ember-cli 主页上的“入门”帖子。 我安装了 ember 0.1.2、bower、phantomjs 等。 但是,我创建了我的应用程序,当我运行“ember server”时,它
我是一名优秀的程序员,十分优秀!