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

时间:2012-06-25 14:02:43

标签: 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'}
];

但是当用户点击集合模型视图时,我会将更多数据加载到模型中,然后我可以创建数据的配置文件视图:

{
 '_id'      : 1,
 'username' : 'Jamie',
 'image'    : 'jamie.jpg',
 'age'      : 21,
 'country'  : 'UK'
};

我已对其进行了设置,以便在加载完整的个人资料数据时,不会再次提取该数据以保存GET请求。

但是我在主用户​​视图上有一个刷新按钮,所以当我刷新数据时,所有加载的配置文件数据都消失了,我需要发出GET请求来获取信息。

我想知道如何解决这个问题。

更多详情:

刷新按钮的目的是添加新的在线用户。我想要这个按钮,所以想要查看新数据的用户将使用此按钮而不是刷新整个页面。

擦除加载数据的问题是当用户返回到配置文件时(这将发生很多,因为我将添加在每个配置文件上聊天的功能,这需要用户在该用户配置文件上)那里是一个不必要的GET请求,因为之前已在用户会话中加载了数据。

1 个答案:

答案 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;
}

我现在没办法测试这个,所以请试一试,让我知道它是否有效。