2013-02-12 12 views
7

आधिकारिक दस्तावेज के आधार पर साथ लाने, जब मैं कुछ इस तरह करते हैं का उपयोग कर अद्यतन कर रहा है कुछ भी हटाए बिना मौजूदा मॉडल बदल दिया।एक संग्रह रीढ़

क्यों मैं डेटा का स्थिर स्रोत (संग्रह का यूआरएल हमेशा एक ही जेसन लौटाता हूं) प्रत्येक आइटम प्राप्त करने के लिए एक ऐड इवेंट कहा जाता है?

यहाँ कुछ कोड (मैं कुछ भी प्रतिपादन नहीं कर रहा हूँ, मैं सिर्फ डिबगिंग कर रहा हूँ):

<!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> 

यहाँ जे एस

(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); 

असल में, मैं defaultroute का उपयोग कर संग्रह लाने, यह सभी मॉडलों और विशेषताओं के साथ ठीक से लाया जाता है।

और जब मैं रीफ्रेश लिंक पर क्लिक करता हूं, तो मैं रीफ्रेश व्यू को कॉल करता हूं, जो मूल रूप से नए मॉडल के साथ संग्रह को अपडेट करने का प्रयास करता है। मुझे क्या समझ में नहीं आ रहा है कि अगर प्रतिक्रिया समान है, तो संग्रह के सभी मॉडल नए के रूप में पाए जाते हैं, को जोड़ते हैं?

Heres a functional link: कंसोल खोलें और आप देखेंगे कि जब संग्रह संग्रह समान होता है तब भी आप रीफ्रेश पर क्लिक करते समय ऐड इवेंट कहलाते हैं।

आपकी मदद के लिए धन्यवाद।

उत्तर

12

मेरा अनुमान है कि आपके मॉडल में idAttribute(doc) नहीं है। डिफ़ॉल्ट कुंजी बैकबोन id है और आपकी JSON प्रविष्टियों में कोई नहीं है, इसलिए यह नहीं बता सकता कि कौन से मॉडल पहले से मौजूद हैं।

(यदि यह एक अद्वितीय नहीं है या किसी अन्य कुंजी) यह करने के लिए अपने मॉडल बदलने का प्रयास करें:

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

हाँ, यह समस्या थी। आपकी मदद के लिए धन्यवाद। – DiegoDevelopero

+0

हाय वहाँ .. मेरे पास मेरे सभी मॉडल, संग्रह और विचार '$ (दस्तावेज़) .ready() में हैं;' मैं बैकबोन.उंटर.क्स्टेंड का भी उपयोग कर रहा हूं। जब भी मैं वर्तमान पृष्ठ रीफ्रेश करता हूं, यह वर्तमान पृष्ठ पर रहता है। इसके साथ कोई समस्या नहीं है .. लेकिन मॉडलों को रीफ्रेश करने पर और संग्रह फिर से रीसेट कर दिए जाते हैं .. और फिर यह खाली .. इसलिए मैं नहीं ले सकता, जो मैंने पहले संग्रह में संग्रहीत किया था। मुझे क्या करना चाहिए? –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^