【发布时间】:2013-05-03 08:50:21
【问题描述】:
我有一个使用$resource 定义的模型,我正在成功加载它。
正如承诺的那样,每个加载的实例都是我定义的类的一个实例。
(以下示例来自 Angular 文档。其中,User.get 生成的对象是 instanceof User。)
var User = $resource('/user/:userId', {userId:'@id'});
但是,假设每个用户都像这样通过网络:
{
"username": "Bob",
"preferences": [
{
"id": 1,
"title": "foo",
"value": false
}
]
}
我定义了一个Preference 工厂,它为Preference 对象添加了有价值的方法。但是当用户加载时,那些preferences 自然不是Preferences。
我试过这个:
User.prototype.constructor = function(obj) {
_.extend(this, obj);
this.items = _.map(this.preferences, function(pref) {
return new Preference(pref);
});
console.log('Our constructor ran'); // never logs anything
}
但它没有任何效果,也不会记录任何内容。
如何使Users'preferences 数组中的每个项目成为Preference 的实例?
【问题讨论】:
-
在处理完
preferences之后,我是否需要在Angular之外加载东西,然后为每个加载的用户自己创建一个new User? -
我认为您可以在资源中使用响应拦截器,并根据需要修改响应。如果有兴趣,我有一个实现类似功能的代码。
标签: angularjs angularjs-resource angularjs-factory