Controller
2017-07-20 00:05
120 查看
英文原版:https://guides.emberjs.com/v2.14.0/controllers/
Controller与组件类似,它会在进入路由的时候被执行。
controller只接收一个参数 —- 路由中的model( )钩子返回的model。
要定义一个controller,使用命令:
controller的名称必须与跟它关联的路由的名称一致。所以,如果你有个路由名叫blog-post,那么你创建的controller也必须叫blog-post。
你仅仅需要在自定义一些属性或action函数的时候创建controller。如果你不创建它,那么Ember将会在运行时自动为你生成一个controller的实例。
我们通过一个简单的例子来了解这些概念,现在弄个路由来显示一篇博客。假定现在有一个BlogPost model对象,要把它渲染在blog-post模版中。
BlogPost model有以下属性:
title
intro
body
author
你的模版中将会绑定这些属性:
在这个简单的例子中,我们没有使用任何特定的要显示的属性或者action函数。现在,我们的controller的model属性是一个代理的角色,被它代理的就是对应的路由中model( )钩子返回的model对象。
现在我们添加一个功能,它使得用户可以切换文章主题的显示与隐藏。为了实现这个效果,我们首先编辑一下下模版,通过isExpanded属性来决定是否显示文章主题。
接下来,在controller中定义action函数:
本章完
Controller与组件类似,它会在进入路由的时候被执行。
controller只接收一个参数 —- 路由中的model( )钩子返回的model。
要定义一个controller,使用命令:
ember generate controller my-controller-name
controller的名称必须与跟它关联的路由的名称一致。所以,如果你有个路由名叫blog-post,那么你创建的controller也必须叫blog-post。
你仅仅需要在自定义一些属性或action函数的时候创建controller。如果你不创建它,那么Ember将会在运行时自动为你生成一个controller的实例。
我们通过一个简单的例子来了解这些概念,现在弄个路由来显示一篇博客。假定现在有一个BlogPost model对象,要把它渲染在blog-post模版中。
BlogPost model有以下属性:
title
intro
body
author
你的模版中将会绑定这些属性:
app/templates/blog-post.hbs <h1>{{model.title}}</h1> <h2>by {{model.author}}</h2> <div class="intro"> {{model.intro}} </div> <hr> <div class="body"> {{model.body}} </div>
在这个简单的例子中,我们没有使用任何特定的要显示的属性或者action函数。现在,我们的controller的model属性是一个代理的角色,被它代理的就是对应的路由中model( )钩子返回的model对象。
现在我们添加一个功能,它使得用户可以切换文章主题的显示与隐藏。为了实现这个效果,我们首先编辑一下下模版,通过isExpanded属性来决定是否显示文章主题。
app/templates/blog-post.hbs <h1>{{model.title}}</h1> <h2>by {{model.author}}</h2> <div class='intro'> {{model.intro}} </div> <hr> {{#if isExpanded}} <button {{action "toggleBody"}}>Hide Body</button> <div class="body"> {{model.body}} </div> {{else}} <button {{action "toggleBody"}}>Show Body</button> {{/if}}
接下来,在controller中定义action函数:
app/controllers/blog-post.js import Ember from 'ember'; export default Ember.Controller.extend({ isExpanded: false, actions: { toggleBody() { this.toggleProperty('isExpanded'); } } });
常见问题
在应用中是否应该使用controller呢?我听说它要被淘汰了!
回答是肯定的!Controller仍然是框架所必须的一部分,并且就算你不显式的定义它,它也会被框架自动生成。本章完
相关文章推荐
- Deprecated UIViewController Methods( also includes methods deprecated in iOS 5)
- spring MVC 一个controller访问另一个controller的方法
- Unity Mecanim中AnimatorController动画转化条件设置解释
- popToViewController 终级用法,11月18日更新
- iOS - dismissViewControllerAnimated 与 popViewControllerAnimated 的区别
- TabBarController设置
- MPMoviePlayerController 电影播放器—IOS开发
- iOS开发UI篇—直接使用UITableView Controller
- UISearchController(使用、修改cancel文字)
- 获得通过UIImagePickerController选取的图片的名称信息
- iOS-UIPopoverController(ipad)
- Ambiguous mapping found. Cannot map 'xxxxController' bean method
- UItabBarController和UINavigationController结合使用
- 使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)
- 利用ocLazyLoad加载controller的方法和问题
- iphone ios MPMoviePlayerController在ios 6 模拟器中无法播放
- UITabBarController详解
- SpringMVC为controller错误做统一处理
- ios navigationcontroller 使用,以及自定义动画切换特效CATransi...
- iOS 设置UINavtionController navigationBar 为透明颜色