从控制器获取模型数据

时间:2014-07-14 00:02:15

标签: ember.js ember-data

在Ember中,如果我有一个用户列表的模型,如果我在UsersController中执行:

users = this.get('model');

users.map(function(user) {
  user.name
});

它应该不解决承诺并返回用户记录?我很困惑为什么这对我不起作用,或者如何以正确的方式获取模型数据。先感谢您。

1 个答案:

答案 0 :(得分:2)

模型承诺由路由器解决。默认情况下,Ember将控制器的content属性设置为路径的模型,除非您覆盖路径的setupController()方法。您的问题在于地图功能的格式化。

看起来你正在使用数组控制器,因为模型是一个数组,所以执行以下操作:

App.UsersController = Em.ArrayController.extend({
  users: function() {
    return this.map(function(user) {
      return user.get('name');
    });
  }.property('@each.user'),
});

您可以使用Em.Array的{​​{1}}方法更加简化此代码,如下所示:

mapBy()

如果您正在使用模板中的用户列表,则可以使用App.UsersController = Em.ArrayController.extend({ users: function() { return this.mapBy('name'); }.property('@each.user'), }); 帮助程序轻松完成此操作。但是,如果您将此列表用于控制器中的其他属性,请务必使用正确的观察者来监视要添加到阵列中的项目:

{{#each users}}

如果您不熟悉模型的工作方式,请参阅setting up a route's modelsetting up a controller