【发布时间】:2014-11-17 16:26:14
【问题描述】:
我们想为我们的 ember 项目添加延迟加载功能,但看起来 ember 总是会用 NULL 覆盖响应 JSON 未返回的字段。首先我得到一个用户列表:
{
"users": [
{
"id": 1,
"name": 'user1',
"email": 'email@user1.com',
"images": [],
"posts": []
},
{
"id": 2,
"name": 'user2',
"email": 'email@user2.com',
"images": [],
"posts": []
},
{
"id": 3,
"name": 'user3',
"email": 'email@user3.com',
"images": [],
"posts": []
},
]
}
这提供了一组最小的用户信息,有两个空的 hasMany 关系“图像”和“帖子”。
现在,如果有人想查看用户的帖子或图片,他会点击触发延迟加载的按钮:
获取https://example.com/userImages/1
{
"user": {
"id": 1,
"images": [1,2,3,4]
},
"images": [
{
"id": 1,
"name": "image1",
"path" "path/to/img1/"
},
{
"id": 2,
"name": "image2",
"path" "path/to/img2/"
},
{
"id": 3,
"name": "image3",
"path" "path/to/img3/"
},
{
"id": 4,
"name": "image4",
"path" "path/to/img4/"
}
]
}
为了将流量减少到最低限度,仅包含新加载的信息。在适配器反序列化并将新数据推送到存储后,来自 User1 的所有未包含在有效负载(名称、电子邮件)中的字段在 ember 存储中设置为 NULL(使用 store.pushPayload('model ',有效载荷))。
是否有可能只更新传入的数据?或者是否有处理这种情况的通用最佳实践?
提前感谢您的帮助
编辑: 一种可能性是使用块扩展 ember-data "_load()" 函数
for (var key in record._data) {
var property = record._data[key];
if( typeof(data[key]) == 'object' && data[key] == null ) {
data[key] = property;
}
}
但这是我能想象到的最糟糕的解决方案。
【问题讨论】:
标签: ember.js ember-data