将纯JS对象的数组转换为Ember.js ArrayController

时间:2012-07-14 18:41:05

标签: ember.js javascript-objects

我刚刚开始使用Ember.js框架,我有一个简单的问题。我将我的数据初始化为普通的JS对象(填充在模板中,由我的PHP脚本创建),并且我想在Ember.Application启动之前将它们转换为Ember.js对象(或者在它开始之后立即将它们转换为Eonald.js对象)我知道差异了。)

这样的事情可能吗?如果是的话,最好的办法是什么?

示例:

App.User = Em.Object.extend({
    id: null,
    avatar: "/path/to/default/avatar.jpg",
    name: null,
});
my_data = [
    {"id":1, "name":"John Doe"}, 
    {"id":2, "name":"Barrack Obama", "avatar":"/president/photo.jpg"}
];
App.usersController = Em.ArrayController.create({
    content: [],
    addUser: function(user) { ... },
});

我需要这样的东西:

App.usersController.initialize(my_data);

编辑:还有一件事。我的数据与Ember对象的格式不完全相同,所以我需要进行一些转换。例如,假设我将头像和名称包含在另一个对象中,如下所示:

{
  "id":2, 
  "info": {
      "name":"Barrack Obama", 
      "avatar":"/president/photo.jpg"
  }
}

1 个答案:

答案 0 :(得分:4)

您可以使用map函数“转换”数组,请参阅http://jsfiddle.net/pangratz666/agp8C/

App.usersController = Em.ArrayController.create({
    content: [],
    initWithDataFromServer: function(hash){
        var users = hash.map(function(item){
            return App.User.create({
                id: item.id,
                name: item.info.name,
                avatar: item.info.avatar
            });
        });
        this.pushObjects(users);
    }
});
App.usersController.initWithDataFromServer(my_data);