Note:本文基于 Ember.js 1.4.0
Ember.js 里,路由(route)通过 setupController 方法设置控制器(controller)属性:
代码如下 | 复制代码 |
App.ApplicationRoute = Ember.Route.extend({ model: function() { return {'user': '陈三', 'blog': 'http://www.111cn.net/'}; }, setupController: function(controller, model) { controller.set('model', model); // <- 这里,我们把 model 内容指派给控制器的 model 属性 } }); |
前端模板里,可以直接引用对象的属性:
代码如下 | 复制代码 |
<script type="text/x-handlebars"> 用户{{user}}的博客地址是{{blog}} </script> |
页面的渲染结果为
用户陈三的博客地址是http://www.111cn.net
但如果用 Ember.js Inspector2 检查 ApplicationController 的属性,如下图:
ember.js 检查器
我们并没有看到一个叫 model 的属性,相反,有一个 content 的属性包含着我们指派给 model 的内容。
如果在 setupController 里把 model 换成 content 如何?
代码如下 | 复制代码 |
App.ApplicationRoute = Ember.Route.extend({ model: function() { return {'user': '陈三', 'blog': 'http://www.111cn.net/'}; }, setupController: function(controller, model) { controller.set('content', model); // <- 这回,我们把 model 内容指派给控制器的 content 属性 } }); |
实践证明,content 与 model 属性是等效的。
更准确的说,model 只是 content 通过 Ember.computed.alias3 设置的一个别名4:
代码如下 | 复制代码 |
model: Ember.computed.alias(‘content’), |
至于为什么要设置这样一个别名,可以看 Github 上的一个讨论5。
时间: 2024-09-10 19:22:07