2014-08-27 9 views
5

मैं फायरबेस में नया हूं, स्नैपशॉट ऑब्जेक्ट से गुण निकालने का प्रयास करने में मुझे बुरा समय है। प्रलेखन द्वारा के रूप में, मैं सीधे ऑब्जेक्ट की सामग्री इस तरह से लेने के लिए सक्षम होना चाहिए:फायरबेस: स्नैपशॉट ऑब्जेक्ट से मूल्य कैसे निकालें?

snapshot.val().property_name 

हालांकि, हर बार मुझे लगता है कि मैं एक 'अनिर्धारित' मूल्य प्राप्त करने की कोशिश। हां, मुझे पता है कि नाम सही है और संपत्ति में सामग्री है।

अगर मैं ऐसा करते हैं:

MyRoom.update({Marker1:'foo'}); 

MyRoom.on('child_added', function(snapshot) 
{ 
    alert(snapshot.name()); // it returns Marker1 
    alert(snapshot.val()); // it returns foo 
}); 

लेकिन अगर बजाय मैं कोशिश:

MyRoom.update({Marker1:'foo'}); 

MyRoom.on('child_added', function(snapshot) 
{ 
    alert(snapshot.val().Marker1); // it returns undefined 
}); 

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

+0

यही तरीका बताया गया है स्नैपशॉट काम करता है। .val() मान देता है और यह अनिर्धारित लौटाता है जब तक कि इसमें मार्कर 1 नाम वाला कोई अन्य ऑब्जेक्ट न हो। आपके मामले में इसमें केवल 'foo' – webduvet

उत्तर

6

टीएल; डॉ; आपको अपने मामले के लिए MyRoom.on('value', का उपयोग करना चाहिए।

आप आमतौर पर Firebase में डेटा के दो बुनियादी प्रकार की दुकान:

  • वस्तुओं
  • संग्रह

वस्तुओं

वस्तुओं आप आम तौर पर इस तरह की दुकान:

var MyRoom = new Firebase('your.firebaseio.com/someroom'); 
MyRoom.set({Name: 'This is my room', Owner: 'frank', Marker1:'bar'}); 

से आपको अवगत करवाने/एक वस्तु पैच चाहते हैं, आप कैसे आप इसे ऊपर करते हैं:

MyRoom.update({Marker1:'foo'}); 

इस विशिष्ट कक्ष हुए परिवर्तनों पर ध्यान करने के लिए, आप का उपयोग करें:

MyRoom.on('value', function(snapshot) { 
    var obj = snapshot.val(); 
    alert(JSON.stringify(val)); // {Name: 'This is my room', Owner: 'frank', Marker1:'foo'} 
    alert(val.Marker1); // foo 
}); 

यहाँ आप हमेशा मिलता है पूरी वस्तुएं, इसके बाद भी आप एक ही संपत्ति को अपडेट कर सकते हैं।

संग्रह

संग्रह वस्तुओं की सूचियां हैं। लेकिन संग्रह स्वयं भी ऑब्जेक्ट्स हैं, इसलिए आप on('value' के साथ संग्रह की निगरानी कर सकते हैं। लेकिन इसका मतलब यह होगा कि आपको लगातार पूरे सरणी से निपटना होगा, जो अक्सर व्यावहारिक नहीं होता है।

आप आमतौर पर संग्रह में अलग-अलग प्रविष्टियों से निपटते हैं। फायरबेस में संग्रह के लिए जोड़/हटाना/अपडेट के लिए विशिष्ट घटनाएं होती हैं। तो नए आइटम एक संग्रह करने के लिए जोड़ रहे हैं कि के लिए सुनने के लिए, आप ऐसा करेंगे:

var MyRooms = new Firebase('your.firebaseio.com/rooms'); 
MyRooms.push({Name: 'This is my room', Owner: 'frank', Marker1:'bar'}); 

MyRooms.on('child_added', function(snapshot) { 
    alert(snapshot.val()); 
}); 

संग्रह वस्तुओं संग्रह वस्तुओं रहे हैं रहे हैं ...

आपका भ्रम तथ्य यह है कि आप मिश्रण कर रहे हैं की वजह से उपजी उपरोक्त से संग्रह तर्क और वस्तु तर्क। यद्यपि यह अक्सर आप जो चाहते हैं वह अक्सर नहीं होता है, यह पूरी तरह से वैध कोड है, यही कारण है कि यह निष्पादित करता है; न केवल परिणाम के साथ आप प्राप्त करने के लिए देख रहे थे।

आप कैसे उपयोग कर सकते हैं "एक संग्रह की तरह एक वस्तु का इलाज" का एक उदाहरण:

var MyRoom = new Firebase('your.firebaseio.com/someroom'); 

MyRoom.update({Marker2:'snafu'}); 

MyRooms.on('child_added', function(snapshot) { 
    // somebody added a property to MyRoom 
}); 

जब आप "एक वस्तु की तरह एक संग्रह का इलाज" करना चाह सकते हैं का एक उदाहरण: https://stackoverflow.com/a/25551254/209103

+0

आपके शानदार स्पष्टीकरण फ्रैंक के लिए बहुत बहुत धन्यवाद! 'मूल्य' घटना द्वारा प्रदान किया गया व्यवहार वही है जो मैं बाद में था। –

+0

बिल्कुल सही। मैंने अतीत में इस भ्रम को देखा है, यही कारण है कि मैंने कुछ हद तक स्पष्टीकरण लिखा था। यदि यह वह उत्तर है जिसे आप ढूंढ रहे थे, तो कृपया प्रश्न के बाईं ओर स्थित चेकमार्क पर क्लिक करें। –

+0

निश्चित रूप से यह वह उत्तर है जिसे मैं ढूंढ रहा था। चेक किए गए !!!! :) –

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