我有一组以基本数据开头的用户模型:
[
{'_id': 1, 'username': 'Jamie', 'image': 'jamie.jpg'},
{'_id': 2, 'username': 'Andrew', 'image': 'andrew.jpg'},
{'_id': 3, 'username': 'Kerry', 'image': 'kerry.jpg'}
];
但是当用户点击集合模型视图时,我会将更多数据加载到模型中,然后我可以创建数据的配置文件视图:
{
'_id' : 1,
'username' : 'Jamie',
'image' : 'jamie.jpg',
'age' : 21,
'country' : 'UK'
};
我已对其进行了设置,以便在加载完整的个人资料数据时,不会再次提取该数据以保存GET请求。
但是我在主用户视图上有一个刷新按钮,所以当我刷新数据时,所有加载的配置文件数据都消失了,我需要发出GET请求来获取信息。
我想知道如何解决这个问题。
更多详情:
刷新按钮的目的是添加新的在线用户。我想要这个按钮,所以想要查看新数据的用户将使用此按钮而不是刷新整个页面。
擦除加载数据的问题是当用户返回到配置文件时(这将发生很多,因为我将添加在每个配置文件上聊天的功能,这需要用户在该用户配置文件上)那里是一个不必要的GET请求,因为之前已在用户会话中加载了数据。
答案 0 :(得分:1)
运行.fetch({add:true})
可以避免覆盖现有模型,但之后会留下重复项。要清除重复项并将新模型添加到集合中,您需要将.fetch({add:true})
与自定义parse()
函数结合使用:
parse: function(response) {
var client_ids = _.map(allUsers,function(user){ return user.get('id'); });
response = _.filter(response,function(user){
// true if user is not already in collection
return _.indexOf(client_ids,user.id) < 0;
});
return response;
}
我现在没办法测试这个,所以请试一试,让我知道它是否有效。