如何最好地将对象(从JSON解码中获取)导入MooTools类?

时间:2010-09-08 21:32:36

标签: javascript mootools

我使用MooTools Class定义了一个名为 User 的类。该类包含一个名为 fullName 的getter(它操纵 firstName lastName )。

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的 firstName lastName 用户的新实例>构造函数中的值。或者也许通过DTO本身并使用:

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

我正在查看$extend(myClass, myDTO),它将myDTO的属性复制到myClass中。似乎是目前最简单的选择。

了解推荐的复制DTO值的方法会很高兴。非常感谢!

1 个答案:

答案 0 :(得分: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转换为用户的知识放在一个“地方”是一件好事。