9

में नॉकआउट-बाउंड लिंक से फायरिंग नहीं करते हैं मेरे पास एक एकल पृष्ठ एप्लिकेशन है जो क्लाइंट-साइड (हैश-आधारित) यूआरएल को रूट करने के लिए डेटा बाइंडिंग और सैमी.जेएस के लिए नॉकआउट.जेएस का उपयोग करता है।सैमी.जेएस रूट्स आईई 10

मुझे इंटरनेट एक्सप्लोरर में एक अजीब समस्या दिखाई दे रही है, हालांकि: कभी-कभी लिंक, क्लिक किए जाने पर, ब्राउज़र के पता बार में यूआरएल बदल देंगे, लेकिन संबंधित सैमी मार्ग निष्पादित नहीं होगा।

यह हर बार नहीं होता है (लेकिन मैं लगातार त्रुटि को पुन: उत्पन्न कर सकता हूं), और यह केवल आईई 10 में होता है (क्रोम हर बार ठीक काम करता है)। ऐसा लगता है कि नॉकआउट से भी संबंधित है, क्योंकि हार्ड-कोड किए गए लिंक का एक सेट एक ही समस्या का प्रदर्शन नहीं करता है।

समझाने के लिए, मैं लेकिन न्यूनतम सब कुछ दूर छीन लिया गया है समस्या से बनाना और दो jsbin उदाहरण तैयार:

उदाहरण (नॉकआउट के साथ) 1:http://jsbin.com/aretis/2/

समस्या देखने के लिए, उपरोक्त लिंक खोलें और "रिकॉर्ड # 1" पर क्लिक करें, फिर "बाज़", फिर "रिकॉर्ड # 1" फिर से क्लिक करें। रिकॉर्ड 1 के लिए यूआरएल पता बार में दिखाई देगा, लेकिन उस रिकॉर्ड के लिए रूट सूची में शामिल नहीं किया जाएगा।

उदाहरण 2 (नॉकआउट के बिना):http://jsbin.com/amivoq/1/

इस उदाहरण में, मैं एक डेटा-बाउंड सूची के बजाय रिकॉर्ड लिंक का एक स्थिर सूची है। किसी भी लिंक (किसी भी क्रम में) पर क्लिक करने के परिणामस्वरूप उस मार्ग को सूची में जोड़ा जा रहा है (जैसा कि इसे करना चाहिए)।

एक अनुस्मारक कि समस्या को पुन: उत्पन्न करने के लिए इन्हें IE में चलाया जाना चाहिए।

कोई विचार?

+0

मुझे आईई 10 के साथ अभी एक ऐप में एक ही समस्या है। क्या आपके पास एक सक्रिय विधि का खुलासा किया गया है? क्या आगे और पीछे स्विच करते समय उसे बुलाया जाता है? – Boone

+1

मैंने हल किया (शायद "चारों ओर काम किया" एक बेहतर वाक्यांश है) केवल $ (विंडो)। ("हैशचेंज") पर बाध्यकारी समस्या और अपना यूआरएल राउटर लिखना। मेरी ज़रूरतें बहुत सरल थीं, और मुझे संदेह है कि मैं सैमी.जेएस की क्षमताओं का लगभग 10% उपयोग कर रहा था। मैं अभी भी अपनी समस्या के स्रोत के रूप में उत्सुक हूं, इसलिए मैं इस सवाल को छोड़ रहा हूं। –

+0

क्या आप सैमी जेएस के साथ उदाहरण 1 को फिर से बना सकते हैं? मैंने सैमीजेएस के आधार पर अपना खुद का राउटर भी बनाया। @ मैट पीटरसन, टिप के लिए धन्यवाद। मुझे 'हैशचेंज' घटना से अवगत नहीं था। मैं खिड़कियों की जांच कर रहा था।एक टाइमर के साथ स्थान :)। – Damien

उत्तर

2

उपरोक्त मेरी टिप्पणी के अनुसार, मैंने खिड़की.hashchange घटना को पकड़कर और स्वयं को यूआरएल को पार्स करके इस समस्या के आसपास काम किया। यह सैमी.जेएस का एकमात्र हिस्सा है जिसका मैं वास्तव में उपयोग कर रहा था और मुझे वास्तविक समस्या को ट्रैक करने में कोई भाग्य नहीं था। उम्मीद है कि यह किसी और की मदद करेगा।

मैंने सोचा hashchange घटना बाँध गया था:

function HandleUrl() { 
    var hash = location.hash; 

    if (hash.indexOf("#Account") >= 0) { 
     var splitParts = hash.split("/"); 

     if (splitParts.length >= 2) { 
      ShowLoadingBox(); 
      ShowAccountDetailFromId(splitParts[1]); 
     } 
    } else if (hash.indexOf("#Contact") >= 0) { 
     var splitParts = hash.split("/"); 

     if (splitParts.length >= 2) { 
      ShowLoadingBox(); 
      ShowContactDetailFromId(splitParts[1]); 
     } 
    } else if (hash.indexOf("#ThingsToDo") >= 0) { 
     SwitchToPanel("navPanelThingsToDo"); 
    } else if (hash.indexOf("#ThingsIveDone") >= 0) { 
     SwitchToPanel("navPanelThingsIveDone"); 
    } else if (hash.indexOf("#Reports") >= 0) { 
     SwitchToPanel("navPanelReports"); 
    } else { 
     SwitchToPanel("navPanelMyAccounts"); 
    } 
} 

कार्यों ShowAccountDetailFromId() और SwitchToPanel() की तरह बस दिखाने के लिए और (अजाक्स कॉल का उपयोग पॉप्युलेट:

$(function() { 
    $(window).on("hashchange", HandleUrl); 

    // Call our URL handler to deal with any initial URL given to us. 
    HandleUrl(); 
} 

पर निम्न URL पार्सर कॉल वेब सेवाओं के लिए) उपयुक्त <div>। यह शायद एक पूरी तरह से बेवकूफ दृष्टिकोण है, लेकिन यह काम कर रहा है (यानी आप यूआरएल, बैक बटन और ब्राउजर हिस्ट्री वर्क इत्यादि बुकमार्क कर सकते हैं) गैर-उत्तर "उत्तर" के लिए मेरी माफ़ी।