我刚刚开始使用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"
}
}
答案 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);