在Ember中,如果我有一个用户列表的模型,如果我在UsersController中执行:
users = this.get('model');
users.map(function(user) {
user.name
});
它应该不解决承诺并返回用户记录?我很困惑为什么这对我不起作用,或者如何以正确的方式获取模型数据。先感谢您。
答案 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 model和setting up a controller。