2010-09-08 25 views
2

我有一個類叫做用戶定義使用MooTools類。這個類包含一個名爲的獲取程序全名(其操縱名字姓氏)。如何將一個對象(從JSON解碼中獲得)導入MooTools類?

var User = new Class({ 
initialize:function(firstName, lastName){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
}, 
fullName:function(){ 
    return this.firstName + ' ' + this.lastName; 
} 
}); 

我可以請求從通過AJAX Java後端用戶配置文件的列表,並獲得JSON響應,基本上對象的JavaScript數組。

[{firstName:'John', lastName:'Doe'},{firstName:'Bob', lastName:'Hope'},....] 

是否有這個陣列的DTO的MooTools裏面用戶類轉換推薦的方法?

我可以用Array.each並在構造函數傳遞每個DTO的的firstNamelastName的價值創造用戶的新實例。或者,也許通過DTO本身和使用:

$each(userDTO,function(value,key){...} 

我期待在$extend(myClass, myDTO)該副本myDTO的性質爲myClass的。似乎目前是最簡單的選擇。

很高興知道推薦的複製DTO值的方法。非常感謝!

回答

2

就個人而言,我會寫一個函數將DTO轉換成用戶,然後通過函數映射的DTO的列表:

var dtos = ... 
var f = function(dto) { return new User(dto.firstName,dto.lastName) }; 
var users = dtos.map(f); 

這在其他語言(一種常見的方法可以被歸類爲「工廠方法」模式的實例) - 我沒有理由不在JavaScript中使用它。

它可能看起來不那麼「酷」比(例如):

var users = dtos.map(function(dto){ return $extend(new User(),dto); }); 

但DTO的可能有所變動(重命名,刪除或 - 最有可能 - 添加字段),並自動爲這些變化(即:不受控制地)傳播給你的班級,這不是一個好主意。另外,將所有關於如何在單個「地點」將DTO轉換爲用戶的知識都是Good Thing架構明智的。

+0

同意!我喜歡函數/地圖方法,並可以在構造函數或$ extend方法之間進行選擇。 – Riaz 2010-09-10 08:36:13