2012-06-25 33 views
0

我有用户模型的集合与基本数据开始:如何停止模式被刷新上覆盖在Backbone.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请求,因为数据已经在用户会话中先前被加载。

+0

需要更多信息。刷新按钮的用途是什么?该按钮试图解决什么问题?为什么消除之前加载的细节是一个问题? –

+0

为您添加了更多信息。 – jamcoupe

+0

单击“刷新”按钮时,哪些数据正在刷新?您是否想向集合中添加新模型而无需重新加载集合中已有的模型? – jackwanders

回答

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

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

+0

我不得不改变'_.map(allUsers,function(user){return user.get('id');});'to'_.map(response,function(user){return user ['_ id '];});'但除此之外,它似乎运作良好! – jamcoupe