2012-03-28 7 views
11

में विशेषताओं को देख सकूं, मेरे पास एक मॉडल उदाहरण है, जिसे मैंने एक और मॉडल उदाहरण सेट किया है, यानी model.set('rsvp', new App.Rsvp)Backbone.js model.get() वापस 'अपरिभाषित' लौट रहा है भले ही मैं console.log

जब मैं दृश्य में उनकी सूची उत्पन्न करने के लिए संग्रह पर पुन: प्रयास करता हूं, तो मुझे पर कॉल करते समय undefined मिलता है।

अभी तक मैं मिल जब मैं एक console.log(model.rsvp) ऐसा करते हैं:

Rsvp 
_changing: false 
_escapedAttributes: Object 
_moreChanges: false 
_previousAttributes: Object 
_setting: false 
attributes: Object 
    attending: true 
    created_at: "2012-03-28T09:42:22-05:00" 
    event_id: 20 
    id: 12 
    updated_at: "2012-03-28T09:42:22-05:00" 
    user_id: 3 
__proto__: Object 
cid: "c53" 
id: 12 
__proto__: Rsvp 

तो यह जाहिर होता वस्तु के साथ कोई समस्या नहीं है कि वहाँ है, अभी तक अपरिभाषित रिटर्न मिलता है।

मुझे अपना जावास्क्रिप्ट कौशल स्वीकार करना होगा अभी भी बहुत कमजोर है। मुझे यहां क्या समझ नहीं आ रहा है?

उत्तर

18

console.log(Object) आपको धोखा दे सकता है। console.log पर कॉल करने के पल में यह आपको Object की स्थिति नहीं दिखाएगा।

यह jsFiddle देखें और कंसोल खोलें। आप देखते हैं कि console.log आपको स्क्रिप्ट के अंत में Object की स्थिति दिखाता है और console.log कॉल के पल में नहीं।

अधिक विश्वसनीय जानकारी के लिए console.log सरल मानों के साथ कॉल करें। Backbone.js Empty Array Attribute

+0

आप सही हैं। $ .when कॉल के साथ एक बग था, लेकिन मुझे नहीं पता था कि समस्या का स्रोत था क्योंकि console.log ठीक दिखता था। यह स्पष्ट रूप से ठीक नहीं था। धन्यवाद! – MysteriousFist

0

सिद्धांत में जो आप कर रहे हैं वह काम करना चाहिए, लेकिन शायद मॉडल उदाहरणों पर विशेषताओं को बाईपास करने और संपत्तियों को स्टोर करने का अच्छा विचार नहीं है। यहां एक jsfiddle that shows it works in concept है। मेरा अनुमान है कि आपका मॉडल उदाहरण आपके कोड में कहीं और fetch के माध्यम से स्रोत डेटा से पुनर्निर्मित हो रहा है, इसलिए model.rsvp संपत्ति गायब हो जाती है। वह या model वही उदाहरण नहीं है जो आपको लगता है।

+0

शुरू किया है, तो मैंने शुरुआत में पहले ही .set का उपयोग करने का प्रयास किया था। और 'console.log की वापस वापस आ गए हैं। तो यह उदाहरण दिखाता है, और तब जब मैं विशेषता प्राप्त करने का प्रयास करता हूं तो अपरिभाषित दिखाता है। तो मुझे नहीं लगता कि यह उस अवधि के दौरान रीसेट कैसे हो रहा है। – MysteriousFist

0

model.rsvp = foo; (देता है फोन इस कोड बिट # 1) जो समतुल्य रूप model['rsvp'] = foo; है नहीं:

में अधिक विस्तृत जानकारी के लिए इस पढ़ें (परीक्षण किया क्रोम, Firefox और Safari से अधिक OSX है) model.set({'rsvp':foo}); (कोड बिट # 2) के समान। यदि आप एक मॉडल उदाहरण model पर किसी अन्य मॉडल इंस्टेंस foo (या कुछ अन्य ऑब्जेक्ट या मान) को टालना चाहते हैं, तो कोड बिट # 1 या उसके समकक्ष का उपयोग करें। यदि आप एक विशेषता उदाहरण जोड़ी को मॉडल उदाहरण में जोड़ना चाहते हैं जो अंततः स्थायी रूप से संग्रहीत हो सकता है, तो कोड बिट # 2 का उपयोग करें। इसी तरह, आप केवल model.rsvp को परिभाषित करने जा रहे हैं यदि आपने model.rsvp = foo; या model['rsvp'] = foo;

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