2012-07-14 61 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