2012-04-18 29 views
6

में एलिमेंट प्रोटेक्शन बग मैंने मेटियर में घड़ी-जैसी-आई-टाइप रीयल-टाइम चैट सेवा की है, लेकिन मुझे उल्का में अंतर्निहित तत्व संरक्षण सुविधा में समस्या हो रही है। असल में, मुझे वर्तमान चैट संदेश div को अपडेट नहीं किया जाना चाहिए, जबकि टेक्स्ट इनपुट में फोकस किया गया है। प्रलेखन में निम्नलिखित निर्देश हैं:उल्का एप

हाथ से लिखे गए अनुप्रयोगों में एक और कांटेदार समस्या तत्व संरक्षण है। मान लें कि उपयोगकर्ता किसी तत्व में 0 टाइप कर रहा है, और उसके बाद उस पृष्ठ का क्षेत्र जिसमें उस तत्व को फिर से खींचा गया है। उपयोगकर्ता फोकस के रूप में, एक कड़वी सवारी के लिए हो सकता है, कर्सर स्थिति, आंशिक रूप से दर्ज टेक्स्ट, और उच्चारण किए गए वर्ण इनपुट स्थिति पुनर्निर्मित होने पर खो जाएगी।

यह एक और समस्या है जो उल्का स्वचालित रूप से हल हो जाती है। बस सुनिश्चित करें कि आपके प्रत्येक फोकस करने योग्य तत्वों में या तो एक अद्वितीय आईडी है, या का नाम ऐसा नाम है जो निकटतम माता-पिता के भीतर अद्वितीय है जिसमें आईडी है। उल्का इन तत्वों को तब भी संरक्षित रखेगा जब उनके संलग्न टेम्पलेट को फिर से प्रस्तुत किया जाएगा, लेकिन फिर भी उनके बच्चों को अपडेट करेंगे और विशेषता परिवर्तनों पर प्रतिलिपि बनाएंगे।

इन दिशाओं के बाद, मैंने अपने इनपुट फ़ील्ड के लिए एक अद्वितीय आईडी सेट की है ताकि यह सुनिश्चित किया जा सके कि जब मैं इसमें टाइप कर रहा हूं तो इसे पुनः प्रस्तुत नहीं किया जाता है। लेकिन अब मुझे निम्नलिखित दो समस्याओं का सामना करना पड़ रहा है:

अन्य व्यक्ति के चैट संदेश अपडेट के रूप में अपडेट होते हैं, लेकिन यह अद्यतन रोकता है जबकि मैं अपने संदेश में टाइप कर रहा हूं। जैसे ही मैं टाइपिंग रोकता हूं (भले ही मेरा इनपुट फ़ील्ड फोकस हो), उनका संदेश दोबारा अपडेट हो रहा है।

जब कोई नया संदेश बनाया जाता है और उसका div डाला जाता है, तो मेरा संदेश अपडेट/पुन: प्रस्तुत किया जाता है भले ही उसका इनपुट फ़ील्ड फोकस हो। इससे अचानक फोकस हो जाता है।

आप उसी चैट रूम में दो अलग-अलग कंप्यूटर/उपयोगकर्ताओं के साथ http://babble.im पर इसका परीक्षण कर सकते हैं।

क्या यह उल्का कोड में है या मेरा खुद का एक बग है? मैं कैसे पता लगाऊं?

संपादित करें:

आह, मुझे लगता है कि मैं पहली बार समस्या का कारण पाया:

उल्का सामान्य रूप से कोई भी आवश्यक अपडेट अप बैचों और कार्यान्वित उन्हें केवल जब अपने कोड नहीं चल रहा है। इस तरह, आप यह सुनिश्चित कर सकते हैं कि DOM आपके नीचे से नहीं बदलेगा। कभी-कभी आप विपरीत व्यवहार चाहते हैं। उदाहरण के लिए, यदि आपने अभी डेटाबेस में एक रिकॉर्ड डाला है, तो आप DOM को अपडेट करने के लिए मजबूर करना चाहते हैं ताकि आप jQuery जैसे लाइब्रेरी का उपयोग कर नए तत्व पा सकें। उस स्थिति में, DOM को तुरंत अद्यतित करने के लिए Meteor.flush पर कॉल करें।

मुझे लगता है कि उपयोगकर्ता टाइप करते समय मेरा कोड चल रहा था, इसलिए डीओएम अपडेट नहीं किया जा रहा था। मैं इसे ठीक करने के लिए Meteor.flush का उपयोग करने का प्रयास करूंगा। अब दूसरी समस्या के साथ क्या हो रहा है?

+0

क्या आप इस समस्या को दोहराने वाले सबसे छोटे संभव उल्का आवेदन पोस्ट कर सकते हैं? – Milimetric

उत्तर

2

पहली समस्या का कारण यह है कि मेटीर आपके स्थानीय डेटाबेस कैश में सभी परिवर्तनों को फ्रीज करता था, जबकि कोई भी तरीका उड़ान में था। उल्का 0.5.1 ने उन दस्तावेज़ों में केवल परिवर्तनों को फ्रीज करने के लिए इसे बेहतर बनाया है जिन्हें आप स्थानीय रूप से संशोधित कर रहे थे। मुझे संदेह है कि उल्का 0.5.1 इसे ठीक करता है। अधिक जानकारी के लिए http://meteor.com/blog/2012/11/19/latency-compensation-improvements-coming-soon-in-meteor-051 देखें।

दूसरी समस्या शायद preserve-inputs पैकेज द्वारा उल्का 0.4.2 में जोड़ा गया है, लेकिन अधिक जानकारी के बिना यह सुनिश्चित करना मुश्किल है।

मुझे यह जानना अच्छा लगेगा कि आपकी समस्याएं अभी भी उल्का के मौजूदा संस्करणों में मौजूद हैं या नहीं!