2013-02-12 40 views
7

取,當我做這樣的事情的集合:更新使用基於官方文檔骨幹

collection.fetch({update: true, remove: false}) 

我爲每一個新的模式「添加」事件和「改變」事件,每改變現有的模型,而不刪除任何東西

爲什麼如果我調用靜態數據源(集合的url總是返回相同的json),那麼爲每個接收到的項目調用add事件?

這裏是一些代碼(我不是渲染什麼,我只是調試):

<!doctype html> 
<html> 
    <head> 
    <title>Example</title> 
    </head> 
    <body> 
    <a href="#refresh">Refresh</a> 
    <script src="js/jquery-1.8.3.min.js"></script> 
    <script src="js/underscore-min.js"></script> 
    <script src="js/backbone-min.js"></script> 
    <script src="js/main.js"></script> 
    </body> 
</html> 

繼承人的JS

(function($){ 
    //Twitter Model 
    ModelsTwitt = Backbone.Model.extend({}); 
    //Twitter Collection 
    CollectionsTwitts = Backbone.Collection.extend({ 
     model:ModelsTwitt, 
     initialize:function(){ 
      console.log('Twitter App Started'); 
     }, 
     url:'data/195.json' 
    }); 
    //Twitts View 
    ViewsTwitts = Backbone.View.extend({ 
     el:$('#twitter-list'), 
     initialize:function(){ 
      _.bindAll(this, 'render'); 
      this.collection.bind('reset',this.render); 
      this.collection.bind('add',this.add); 
     }, 
     render:function(){ 
      console.log("This is the collection",this.collection); 
     }, 
     add:function(model){ 
      console.log("add event called",model); 
     } 
    }); 
    //Twitter Router 
    Router = Backbone.Router.extend({ 
     routes:{ 
      '':'defaultRoute',//Default list twitts route 
      'refresh':'refreshView' 
     }, 
     defaultRoute:function(){ 
      this.twitts = new CollectionsTwitts(); 
      new ViewsTwitts({collection:this.twitts}); 
      this.twitts.fetch(); 
     }, 
     refreshView:function(){ 
      this.twitts.fetch({update:true,remove:false}); 
     } 
    }); 
    var appRouter = new Router(); 
    Backbone.history.start(); 
})(jQuery); 

基本上,我使用默認路由獲取集合,它與所有模型和屬性一起正確提取。

當我點擊刷新鏈接時,我調用refreshView,它基本上試圖用新模型更新集合。 我不明白的是,爲什麼如果反應是相同的,所有的收集模型都被檢測爲新的,觸發

Heres a functional link:打開控制檯,即使集合相同,您也會看到如何在單擊刷新時調用添加事件。

感謝您的幫助。

回答

12

我的猜測是你的模型沒有idAttribute(doc)。 Backbone的默認鍵是id,你的JSON條目沒有一個,所以它不能分辨哪些模型已經存在。

試着改變你的模型,這個(或其他關鍵,如果這個人是不是唯一的):

ModelsTwitt = Backbone.Model.extend({ 
    idAttribute: 'id_event' 
}); 
+2

是的,這就是問題所在。 感謝您的幫助。 – DiegoDevelopero 2013-02-12 14:31:07

+0

嗨,我有我的所有模型,集合和視圖'$(document).ready();'我也使用Backbone.router.extend。每當我刷新當前頁面時,它都會保留在當前頁面上。沒有問題,但..刷新模型和集合重置..然後它的空..所以我不能獲取,我以前存儲在集合中。我該怎麼辦? – 2013-07-03 11:32:14