[json] फ़िल्टरिंग एक क्वेरी के साथ चयन करें रीडस्टोर: चयन छड़ी नहीं है



Answers

आज भी यही समस्या है, जो दोोज संस्करण 1.1.1 और 1.2.0 को प्रभावित करता है।

जहाँ तक मैं समझ सकता हूँ कि, फ़िल्टरिंग चयन को अंतिम क्वेरी के बाद उपयोगकर्ता फ़ील्ड छोड़ देता है और उम्मीद करता है कि क्वेरी के परिणाम में केवल एक परिणाम होता है, जो यह तब फ़ील्ड के मान के लिए उपयोग करता है।

यह मेरे लिए एक बग की तरह लग रहा है (हालांकि मुझे उम्मीद है कि मैं गलत साबित हो रहा हूं), लेकिन एक के लिए आपको अभी भी साथ करना पड़ सकता है

इस पृष्ठ पर कुछ (अपूर्ण) सूचना है: http://www.nabble.com/Problems-with-QueryReadStore-td19269498.html

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

यदि वास्तव में आपको फ़िल्टरिंग चयन के साथ एक ही समस्या है, इसके पीछे डेटा संग्रह की परवाह किए बिना, जब भी डुप्लिकेट लेबल हों

उदाहरण के लिए, जब विजेट फोकस खो देता है, तो इसे पहले विकल्प पर रीसेट कर दिया जाता है:

 <select id="coffee2" name="coffee2" 
    dojotype="dijit.form.FilteringSelect" 
    autoComplete="false">
    <script type="dojo/method" event="onChange"  args="newValue">
        console.log(dijit.byId('coffee2').getValue() + '/' + dijit.byId('coffee2').getDisplayedValue());
    </script>
    <option value="0">AAA</option>
    <option value="1">AAA</option>
    <option value="2">AAA</option>
    <option value="3">AAA</option>
    <option value="4">AAA</option>
  </select>

मेरी राय में एक फीचर से अधिक एक बग

Question

मैं एक dijit.form.FilteringSelect का उपयोग कर रहा dijit.form.FilteringSelect द्वारा समर्थित का चयन करने के लिए उपयोगकर्ता को एक क्षेत्र का चयन करने के लिए ("ऑटो-पूर्ण" तंत्र लगता है)। उपयोगकर्ता द्वारा दर्ज किए गए प्रत्येक वर्ण पर, QueryReadStore मिलान करने वाले क्षेत्रों (संबंधित आईडी के साथ) की QueryReadStore सूची का इंतजार कर, सर्वर पर अनुरोध भेजता है। जब तक एक छोटी पर्याप्त सूची दिखाई जाती है, उपयोगकर्ता वांछित आइटम को चुनता है। [बेशक, हर कीस्ट्रोक पर पूछताछ सबसे कुशल पैटर्न नहीं है, लेकिन अब यह काफी अच्छा है।]

अप्रत्याशित व्यवहार: कुछ दुर्लभ लेकिन विशिष्ट अवसरों में, उपयोगकर्ता द्वारा बनाई जाने वाली पसंद "छड़ी नहीं करता" उदाहरण के लिए, यदि उपयोगकर्ता प्रकार " can ", तो उस क्रम में निम्नलिखित विकल्पों के साथ प्रस्तुत किया जाता है:

Atlantic Canada
Canada
English Canada
Lower Canada
Upper Canada
Western Canada

अगर वह इनके बीच " Canada " चुनती है, तो डीआईजीट ड्रॉप डाउन चयन को बंद कर देता है, जिसने उसकी पसंद को सही तरीके से चुना है। लेकिन उपयोगकर्ता द्वारा फ़ील्ड छोड़ने वाले समय से, चयन " Atlantic Canada " पर जाता है!

यह विचित्र घटना कुछ विशिष्ट क्षेत्रों की एक छोटी संख्या के लिए व्यवस्थित रूप से होती है। (सबसे पहले, मैंने सोचा था कि बुरे व्यवहार वाले क्षेत्रों के बीच सामान्य कारक यह था कि उनके नाम में उच्चारण अक्षर या हाइफ़न होते हैं, लेकिन कनाडाई उदाहरण के साथ स्पष्ट रूप से ऐसा नहीं है। अब तक, मैं एक नियमित पैटर्न को खोजना नहीं चाहता।

मुझे कहीं भी एक जैसी समस्या का कोई उल्लेख नहीं मिला है। मैं पूरी तरह से जांच करने के लिए तैयार हूं, लेकिन, जैसा कि मैं डोजो में नया हूँ, मैं डोगो के कोड के अंदर आने से पहले संकेतकों की सराहना करता हूं: मुझे पहले कहाँ देखना चाहिए? कुछ संभावित समस्याएं हैं जो उस व्यवहार का कारण बन सकती हैं? क्या मैं निश्चित अवधारणाओं को छोड़ सकता हूं? कंसोल (या फ़ायरबग) का सबसे अच्छा उपयोग करने के लिए मुझे इस के नीचे कैसे जाना चाहिए? आदि।

समस्या दो dojo 1.1.1 और dojo 1.2.3 के साथ होती है।

यहाँ FilteringSelect के चयन (प्रोग्रामेटिक) है:

new dijit.form.FilteringSelect({
   name = "region";
   autoComplete = false;
   hasDownArrow = false;
   labelAttr = "name";
   queryExpr = "${0}";
   store = new dojox.data.QueryReadStore({url:'/query/regions'});
}, myNode);

संपादित करें (2009/02/18): अतिरिक्त विवरण

डेमलिन के उत्तर के बाद, मैं यह जानना चाहता था कि इस स्थिति के बारे में FilteringSelect का चयन करें। मान लीजिए कि मैं FilteringSelect onChange घटनाओं को onChange और onBlur लॉगिंग फ़ंक्शंस से कनेक्ट करता हूं, मुझे निम्नलिखित प्ले-बाय-प्ले अनुक्रम मिलता है:

  • मैं फ़ील्ड में और क्लिक करें: can
  • 6 क्षेत्रों (ऊपर सूचीबद्ध) की ड्रॉप-डाउन सूची दिखाई देती है
  • कुंजीपटल कर्सर के साथ, मैं " Canada " (जो आईडी 1 के साथ क्षेत्र है) की सूची को नीचे ले जाता हूं
  • मैं प्रेस (इस प्रकार दुकान के एक आइटम का चयन ) दबाएँ ड्रॉप-डाउन सूची अब गायब हो गई है और फ़ील्ड में टेक्स्ट " Canada " दिखाई देता है। इस बिंदु पर, निम्न लॉगिंग के साथ पहली घटना निकाल दी गई है:

    onChange event: region 1
  • मैं tab दबाकर क्षेत्र को छोड़ देता हूं। यहां, दो घटनाओं को एक दूसरे के बाद निकाल दिया जाता है, निम्न क्रम में:

    onBlur event: region 1
    onChange event: region 246

(क्षेत्र 246 Atlantic Canada ।) अब यह बहुत ही रोचक है ... जब तक मैं क्षेत्र छोड़ देता हूं (पर ब्लूर), Canada अभी भी चयनित मान है। रहस्यमय स्वैप उसके बाद ही होता है ...




पीएनटी की टिप्पणी के बाद ...

यह चर्चा स्पष्ट करती है कि समस्या कहां है: "ब्लर" पर, QueryReadStore आखिरी बार सर्वर के लिए फिर से पूछताछ करता है, जो कि DisplayedValue का उपयोग अपनी क्वेरी-स्ट्रिंग के रूप में करता है।

मेरे उदाहरण में, यह " Canada " होगा। यह देखते हुए कि मेरी शॉर्टलिस्ट (आगे देखें) में छह क्षेत्रों में यह स्ट्रिंग होती है और मेरा सर्वर क्वेरी स्ट्रिंग युक्त सभी आइटमों की वर्णानुक्रमिक सूची वापस करने के लिए क्रमादेशित है (और केवल उन लोगों के साथ शुरू नहीं), फिर से पूरी सूची लौटे, और FilteringSelect सेलेक्ट इन के बीच पहला आइटम उठाता है - जो इस मामले में " Atlantic Canada " है

अगर मैं अपने विश्लेषण में सही हूं, तो मेरे लिए एक संभावित तरीका आगे बढ़ना होगा ताकि मेरी क्वेरी सेवा को पुन: लागू किया जा सके ताकि सूची के शीर्ष पर (वर्णानुक्रम से पहले) किसी भी आइटम को क्वेरी स्ट्रिंग से मेल खाता हो।




"उपयोगकर्ता द्वारा दर्ज प्रत्येक वर्ण पर, QueryReadStore सर्वर पर एक अनुरोध भेजता है ..."

फ़िल्टरिंग चयन चुनें विशेषता है कि आप सेट कर सकते हैं, जो अनुरोध भेजने से पहले निर्दिष्ट मिलीसेकंड की प्रतीक्षा करता है।




Links