Ember - 控制器的content属性和model属性有什么区别?

9
在Ember的官方指南中,提供了两种设置控制器底层对象的方法。第一种是设置model属性:
App.SongsRoute = Ember.Route.extend({
    setupController: function(controller, playlist) {
        controller.set('model', playlist.get('songs'));
    }
});

第二步是设置 content 属性:
MyApp.listController = Ember.ArrayController.create();

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

这两个属性代表同一件事吗?我应该使用哪个?
2个回答

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


3
是的,这是正确的。稍微具体解释一下,这个变更是为了使 API 更加一致。例如,在路由中的 model 钩子函数。将该钩子函数的结果设置为匹配控制器的 model 属性比旧的 content 属性更一致。该别名仍然存在以确保向后兼容性。您应该始终使用 model 属性。 - mavilein
从Ember.ArrayController源代码中:content: Ember.computed(function() { return Ember.A(); }), 有人能解释一下吗? - mrbrdo

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接