2012-03-06 14 views
8

मेरे पास मूल रीढ़ की हड्डी मॉडल है, इसकी urlRoot विशेषता सेट है और सर्वर पक्ष पर संबंधित लक्ष्य एक सही JSON आउटपुट (JSON स्ट्रिंग और application/json शीर्षलेख दोनों) देता है।Backbone.js वास्तव में विशेषताएँ सेट नहीं करते

मैं एक फोन इस तरह लाने: इस बिंदु पर

var athlete = new Athlete({ id: 1 }); 
athlete.fetch(); 

अगर मैं एक

console.log(athlete); 

जोड़ने मैं मॉडल देख सकते हैं, और फ़ायरबग में यह निरीक्षण मैं खोल सकते हैं गुण वस्तु और सर्वर से लौटाए गए सभी मान देखें।

लेकिन अगर मैं एक कार्य करें: मैं undefined मिल

console.log(athlete.get('name')); 

भी (नाम डोम निरीक्षण मैं उपर्युक्त में विशेषताओं के तहत दिखाई देता है) एक कर:

console.log(athlete.attributes); 

एक ऑब्जेक्ट देता है जिसमें केवल {id: 1} होता है जो कि मॉडल बनाने के दौरान पारित तर्क है।

अगर मैं इस तरह मॉडल बनाने:

var athlete = new Athlete(<JSON string copypasted from the server response>); 

तो सब कुछ ठीक काम करता है, .get() विधि रिटर्न जो कुछ भी मैं पूछता हूँ, और athlete.attributes सभी मूल्यों को दर्शाता है।

मैं क्या गलत कर रहा हूं?

उत्तर

18

fetch असीमित है, जिसका अर्थ यह है कि यदि आप तुरंत console.log(athlete.get('name')) को प्राप्त करने के बाद कॉल करते हैं तो डेटा उपलब्ध नहीं होगा। जब डेटा उपलब्ध है

उपयोग घटनाओं अधिसूचित किया जाना है, उदाहरण के

var athlete = new Athlete({id: 1}); 
athlete.on("change", function (model) { 
    console.log(model.get('name')); 
}); 
athlete.fetch(); 

के लिए या अपने लिए एक कॉलबैक जोड़ने लाने

var athlete = new Athlete({ id: 1 }); 
athlete.fetch({ 
    success: function (model) { 
     console.log(model.get('name')); 
    } 
}); 

या वादा fetch द्वारा लौटाए का लाभ लें:

athlete.fetch().then(function() { 
    console.log(athlete.get('name')); 
}); 
+0

बेशक अब मुझे एहसास हुआ कि यह कितना स्पष्ट था, इंगित करने के लिए धन्यवाद :) –

1

इस उदाहरण में घटनाओं का उपयोग करते समय एक त्वरित टिप्पणी के रूप में। यह मेरे मामले में change के साथ काम नहीं करता है क्योंकि यह घटनाएं प्रत्येक परिवर्तन पर आग लगती हैं। तो sync चाल है।

var athlete = new Athlete({id: 1}); 
athlete.on("sync", function (model) { 
    console.log(model.get('name')); 
}); 
athlete.fetch(); 
संबंधित मुद्दे