2012-07-14 62 views
2

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

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

例子:

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

看看https://github.com/emberjs/data – 2012-07-14 22:42:28

+1

将App.usersController.pushObjects(my_data)转换为Ember.Object后出现什么问题? – Rajat 2012-07-15 04:45:03

+0

这就是我的观点。我怎样才能轻松地转换它们,没有任何不必要的代码? – 2012-07-15 09:10:02

回答

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); 
+0

谢谢,我用这种方法。 – 2012-07-15 10:55:29