1 min read

Ember.js 里 model 与 content 属性的区别

Note:本文基于 Ember.js 1.4.0

Ember.js 里,路由(route)通过 setupController 方法设置控制器(controller)属性:

App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    return {'user': '陈三', 'blog': 'http://www.zfanw.com/blog/'};
  },
  setupController: function(controller, model) {
    controller.set('model', model); // <- 这里,我们把 model 内容指派给控制器的 model 属性
  }
});

前端模板里,可以直接引用对象的属性:

<script type="text/x-handlebars">
  用户{{user}}的博客地址是{{blog}}
</script>

页面的渲染结果为1

用户陈三的博客地址是http://www.zfanw.com/blog/

但如果用 Ember.js Inspector 2检查 ApplicationController 的属性,如下图:

ember.js 检查器

我们并没有看到一个叫 model 的属性,相反,有一个 content 的属性包含着我们指派给 model 的内容。

如果在 setupController 里把 model 换成 content 如何?

App.ApplicationRoute = Ember.Route.extend({
  model: function() {
    return {'user': '陈三', 'blog': 'http://www.zfanw.com/blog/'};
  },
  setupController: function(controller, model) {
    controller.set('content', model); // <- 这回,我们把 model 内容指派给控制器的 content 属性
  }
});

实践证明,contentmodel 属性是等效的。

更准确的说,model 只是 content 通过 Ember.computed.alias 3设置的一个别名4

model: Ember.computed.alias(‘content’),

至于为什么要设置这样一个别名,可以看 Github 上的一个讨论5

报告问题 修订

如果你有自建 https 代理的需求,欢迎尝试 Phantom,一键搭建,方便快捷。查看 demo