2014-06-19 11 views
5

मेरे पास एक ऐसा एप्लिकेशन है जिसमें मैं कुछ प्रारंभिक डेटा लोड करना चाहता हूं (Firebase.once('value') के साथ पूरा किया गया) और फिर कुछ बिंदु बाद मैं जोड़े गए नोड्स की घटनाएं प्राप्त करना चाहता हूं उस फायरबेस संदर्भ के लिए।फायरबेस बच्चों के सभी डेटा को लोड किए बिना बच्चे को पहले से दबाएं

इसके लिए, मैं Firebase.on('child_added') का उपयोग करना चाहता हूं, लेकिन परिभाषा (और अभ्यास में देखा गया) के अनुसार यह पहले उस फायरबेस संदर्भ में सभी डेटा लोड करता है।

क्या इस व्यवहार को पाने के लिए कोई तरीका है और केवल child_added घटनाओं के लिए सुनें। इसके अलावा, डेटा के शुरुआती सेट को डंप करने जैसे कामकाज समाधान नहीं हैं (एक लाख से अधिक डेटा पॉइंट्स वाले डेटासेट की कल्पना करें - मैं प्रत्येक डेटा पॉइंट को सिर्फ तब नहीं सुनना चाहता जब कोई जोड़ा जाए!)।

संपादित करें: Firebase.on('child_added') प्रारंभिक अनुरोध से आने वाले डेटा की मात्रा को सीमित करने के लिए limit() के साथ जोड़ा जा सकता है। मेरे आवेदन के लिए संभवतः, एक बिंदु पर फायरबेस में केवल एक डेटा पॉइंट जोड़ा जाएगा, इसलिए मैंने Firebase.limit(1).on('child_added') का उपयोग किया है जो एक डेटा बिंदु पर लोड किए गए प्रारंभिक डेटा की मात्रा को सीमित करता है। लेकिन, मुझे इस कारण को दो कारणों से पसंद नहीं है:

  1. यह अभी भी एक कामकाज है। मुझे अभी भी डेटा को अनदेखा करना है कि मुझे अनदेखा करने की चिंता करने की ज़रूरत नहीं है।
  2. अगर किसी कारण से मेरे आवेदन की प्रकृति बदलनी पड़ी और मैं एक बार में फायरबेस संदर्भ में कई बच्चों को जोड़ना चाहता था - limit(1) लागू करने से आवेदन को सभी अतिरिक्त बच्चों को प्राप्त करने से सीमित कर दिया जाएगा? मुझे यकीन नहीं है कि यह मामला है या child_added प्रत्येक बच्चे को जोड़ा जाएगा, भले ही उन्हें बैच के रूप में जोड़ा गया हो।

यह कॉल करने के लिए एक तर्क के लिए एक अच्छा समाधान होगा के रूप में एक true/false ध्वज प्रदान की तरह लगता है, लेकिन मैं एक जवाब मैं glossing किया गया है हो, तो देखने के लिए इंतजार करेंगे ...

+0

आप प्रत्येक डेटासेट में सृजन टाइमस्टैम्प जोड़ सकते हैं और वर्तमान टाइमस्टैम्प का उपयोग 'स्टार्टएट' क्वेरी के रूप में कर सकते हैं https://www.firebase.com/docs/ordered-data.html https://www.firebase.com/docs /javascript/query/startat.html – Prinzhorn

+0

यह वर्तमान में संरचित किए जाने के तरीके के साथ अच्छी तरह से काम करेगा - डेटा की "कुंजी" (एक कुंजी में: वैल प्रारूप) डेटा का टाइमस्टैम्प है। जानकारी के लिए धन्यवाद! – MandM

उत्तर

5

पुराने संदेश हटाएं

यदि आप ऐतिहासिक डेटा में रुचि नहीं रखते हैं, तो आप इसे संदेश कतार के रूप में उपयोग कर रहे हैं। यदि ऐसा है, पुराने रिकॉर्ड से उन्हें हटाए जाने के बाद हटाया जाना चाहिए (या वैकल्पिक पथ पर संग्रहीत)। इस तरह, समस्या स्वयं हल हो रही है।

आप इस मॉडल, एक जोड़ी अच्छा विकल्प उपलब्ध हैं बनाए रखने के लिए करना चाहते हैं:

दुकान पिछले कुंजी पढ़ने और उपयोग करने वाले अपने अगले लोड की प्रारंभिक बिंदु के रूप

तुम भी संग्रहीत कर सकती है Firebase

var fb = new Firebase(URL); 
fb.child('last_read_key').once('value', function(lastReadSnap) { 
    var lastKey = lastReadSnap.val(); 
    var pri = lastReadSnap.getPriority(); 
    fb.child('data_to_read').startAt(pri, lastKey).on('child_added', function(snap) { 
     if(snap.name() !== lastKey) { 
     console.log('new record', snap.name()); 
     fb.child('last_read_key').setWithPriority(snap.name(), snap.getPriority()); 
     } 
    }); 
}); 

उपयोग प्राथमिकताओं में महत्वपूर्ण पुराने रिकॉर्ड की टाइमस्टैम्प चिह्नित करने के लिए

,210

जब लेखन के रिकॉर्ड, उपयोग setWithPriority:

fb.child('records/$recordid').setWithPriority(data, Firebase.ServerValue.TIMESTAMP); 

अब आप पर "अब" शुरू करने के रिकॉर्ड पढ़ सकते हैं:

fb.child('records').startAt(Date.now()).on('child_added', function(snap) { 
    console.log('new child', snap.name()); 
}); 

नोट यहाँ टाइम स्टांप का उपयोग कर में से एक चेतावनी। मैंने तारीख का इस्तेमाल किया।अब() startAt() कमांड में, क्योंकि यह वर्तमान में Firebase.ServerValue.TIMESTAMP (इसके लिए दायर बग) का समर्थन नहीं करता है।

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

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