如何停止在backbone.js中刷新时覆盖模型

如何停止在backbone.js中刷新时覆盖模型,backbone.js,underscore.js,Backbone.js,Underscore.js,我有一个从基本数据开始的用户模型集合: [ {'_id': 1, 'username': 'Jamie', 'image': 'jamie.jpg'}, {'_id': 2, 'username': 'Andrew', 'image': 'andrew.jpg'}, {'_id': 3, 'username': 'Kerry', 'image': 'kerry.jpg'} ]; 但是,当用户单击“集合模型”视图时,我会将更多数据加载到模型中,这样我就可以创建数据的纵断面图: { '_i

我有一个从基本数据开始的用户模型集合:

[
 {'_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请求。

运行
.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;
}
parse:函数(响应){
var client_id=u.map(alluser,函数(user){return user.get('id');});
response=\过滤器(响应,函数(用户){
//如果用户不在集合中,则为true
返回u.indexOf(客户端id,用户id)<0;
});
返回响应;
}

我现在没有任何方法来测试它,所以请尝试一下,并让我知道它是否有效。

需要更多信息。刷新按钮的用途是什么?那个按钮想解决什么问题?为什么清除以前加载的详细信息会出现问题?为您添加了更多信息。当您单击“刷新”按钮时,将刷新哪些数据?是否要在不重新加载集合中已有的模型的情况下向集合中添加新模型?当用户单击“刷新”时,它将向集合中发送获取请求,但我只希望向集合中添加新模型(如果有),以便当前模型不受影响。我必须更改
。\map(用户,函数){return user.get('id');})
\.map(响应,函数(user){return user['''u id'];})
,但除此之外,它似乎工作得很好!