Ember循环控制器的内容

时间:2013-06-13 14:07:47

标签: ember.js ember-data

我正在尝试遍历从其他控制器获取的内容并使用forEach()修改某些属性。然而,这不起作用和任何获得财产的尝试 在forEach循环中返回undefined 所以这就是我试图做的事情:

  • 我的内容为this.get("controllers.index.arrangedContent") 内容是一个记录数组,与local-storage-adapter一起存储。
  • 我的模特:

    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循环中访问属性“name”,返回存储在模型上的正确值?

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

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时为什么这不起作用?

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

1 个答案:

答案 0 :(得分:5)

要访问您需要始终使用访问者(获取/设置)方法的任何内容:

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

对于你想要完成的事情,有一种更好的方法:

var formattedNames = names.map(function(item, index, enumerable) {
    return item.get('name') + "!";
});