Ember - 控制器的内容和模型属性之间有什么区别

时间:2014-01-09 11:17:36

标签: javascript ember.js

在ember的官方指南中,它提供了两种设置控制器底层对象的方法。 首先是设置模型属性:

App.SongsRoute = Ember.Route.extend({
    setupController: function(controller, playlist) {
        controller.set('model', playlist.get('songs'));
    }
});

其次是设置内容属性:

MyApp.listController = Ember.ArrayController.create();

$.get('people.json', function(data) {
    MyApp.listController.set('content', data);
});

这两个属性是否代表相同的东西?我应该使用哪种方式?

2 个答案:

答案 0 :(得分:7)

看起来他们是一回事,

https://github.com/emberjs/ember.js/blob/v1.3.0/packages/ember-runtime/lib/controllers/controller.js#L44

Ember.ControllerMixin = Ember.Mixin.create(Ember.ActionHandler, {
....
model: Ember.computed.alias('content'),
....

model属性是content的别名。

此外,

https://github.com/emberjs/ember.js/blob/v1.3.0/packages/ember-routing/lib/system/route.js#L849

提及,

By default, the `setupController` hook sets the `content` property of
the controller to the `model`.

<强>更新 从v1.7.0开始不推荐使用,代码放在mixin中。 https://github.com/emberjs/ember.js/blob/v2.12.0/packages/ember-runtime/lib/mixins/controller.js 随着相关的弃用mixin。 https://github.com/emberjs/ember.js/blob/v2.12.0/packages/ember-runtime/lib/mixins/controller_content_model_alias_deprecation.js

答案 1 :(得分:1)

在文档 - http://emberjs.com/api/classes/Ember.Controller.html#property_model中 - 它清楚地指出,在检索或修改控制器的模型时,应该使用model属性而不是content属性。