Преобразование массива простых объектов JS в Ember.js ArrayController

Я только начал использовать фреймворк Ember.js, и у меня есть простая проблема. У меня есть данные, инициализированные как простые объекты JS (заполненные в шаблоне, созданные моими PHP-скриптами), и я хотел бы преобразовать их в объекты Ember.js до запуска Ember.Application (или сразу после его запуска, я не пока не знаю отличий).

Возможно ли такое? Если да, то как лучше всего это сделать?

Пример:

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"
  }
}

person Pavel S.    schedule 14.07.2012    source источник
comment
Взгляните на github.com/emberjs/data.   -  person Panagiotis Panagi    schedule 15.07.2012
comment
Что не так с App.usersController.pushObjects(my_data) после их преобразования в Ember.Object?   -  person Rajat    schedule 15.07.2012
comment
Это моя точка зрения. Как я могу конвертировать их легко, без лишнего кода?   -  person Pavel S.    schedule 15.07.2012


Ответы (1)


Вы можете использовать функцию 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);
person pangratz    schedule 15.07.2012
comment
Спасибо, я использовал этот подход. - person Pavel S.; 15.07.2012