0

我正在尝试遍历从另一个控制器获取的内容并使用forEach(). 但是,这不起作用,并且任何在forEach循环中获取属性的尝试都会返回undefined
所以这就是我试图做的事情:

  • 我正在获取内容this.get("controllers.index.arrangedContent")
    内容是使用本地存储适配器存储的记录数组。
  • 我的模型:

    App.Data = DS.Model.extend({  
    name: DS.attr('string')  
    });
    

在我的控制器中:

App.StartController = Ember.ObjectController.extend({
needs: 'index',
alert: function() {
    // get the "content" from the IndexController;
    var names = this.get("controllers.index.arrangedContent");
    var formattedNames = [];

    names.forEach(function(item) {
    var name = item.name; // <--returns "undefined"
    name += "!";
    formattedNames.push(name);
   });

   alert(formattedNames[0] );   
}
});

问题:有没有办法在forEach循环中访问属性“名称”,返回存储在模型中的正确值?

注意:首先我认为这将是本地存储适配器上的一个错误,所以我在后端的“夹具适配器”上尝试了同样的事情,但这也不起作用。
但是,如果我在路由器上硬编码一些模型实例,例如:

App.IndexRoute = Ember.Route.extend({
model: function() {
    return [Ember.Object.create({id: 523, name: "John"}),
            Ember.Object.create({id: 534, name: "Warren"}),
            Ember.Object.create({id: 234, name: "Katy" })
     ];
}
});  

forEach循环中获取 name 属性有效。为什么在使用 ember-data 时这不起作用?

任何提示/建议都非常感谢!谢谢!

4

1 回答 1

5

To access any content you need to use the accessor (get/set) methods at all times:

var name = item.get('name');

For what you want to accomplish, there is a better way:

var formattedNames = names.map(function(item, index, enumerable) {
    return item.get('name') + "!";
});
于 2013-06-13T16:15:44.513 回答