2011-02-11 7 views
8

में मैं सामने के अंत पर बैक-एंड पर CodeIgniter और Backbone.js के साथ एक वेब अनुप्रयोग developping कर रहा हूँ। मैं अपने प्रारंभ टेम्पलेट के रूप में HTML5 Boilerplate का भी उपयोग कर रहा हूं।Backbone.js बग का कारण केवल IE7

मैं बैकबोन के नियंत्रक और इतिहास का उपयोग कर रहा अपने आवेदन के माध्यम से मुख्य नेविगेशन के रूप में। मैंने इसे अतीत में एक बार किया है और सबकुछ ठीक काम करता है। समस्या यह है, जब मैं) Backbone.History.start (साथ hashchange घटना पर कब्जा शुरू करने और एक लिंक example.com/#home पर क्लिक करें, URL में हैश परिवर्तन, घटना निकाल दिया जाता है, लेकिन 2 सेकंड के बाद, हैश को मंजूरी दे दी है यूआरएल से और जावास्क्रिप्ट त्रुटि केवल i7 में फेंक दी जाती है।

मैं स्रोत कोड और hashchange घटना पर एक नज़र है एक IFRAME हैश मान परिवर्तन की जांच करने के लिए एक अंतराल चल बनाकर IE7 में हासिल की है।

किसी को भी करने से पहले इस अजीब बग था और पता है कि यह कैसे हल करने के लिए?

उत्तर

4

सही तरीके से रीढ़ Backbone.history.saveLocation (हैश) लगता है के साथ एक #hash आधार आवेदन को संभालने के लिए और Backbone.history.loadUrl() नियंत्रक सक्षम करने के लिए के बाद मार्ग।

व्हिश मैं इस भयानक MVC पुस्तकालय :)

+0

'Backbone.history.start()' IE7 को छोड़कर सही तरीके से काम करता है। ऐसा लगता है कि आईई 7 एक 'हैशचेंज' घटना ट्रिगर नहीं करता है। मेरे मामले में मैंने ['Modernizr.hashchange'] (http://www.modernizr.com/docs/#hashchange) का उपयोग पहली बार जांचने के लिए किया था जब यह समर्थित है। यदि नहीं, तो मैं '.saveLocation()' और '.loadUrl()' का उपयोग करूंगा। – Shiki

2

हैश-यूआरएल पर क्लिक करना वास्तव में आईई में इतिहास प्रविष्टि को सहेजता नहीं है - बैकबोन के saveLocation फ़ंक्शन का उपयोग उस स्थान के मार्कर को छोड़ने के लिए करें जिसे आप वापस जाने में सक्षम होना चाहते हैं। पूर्ण स्कूप के लिए देखें:

http://documentcloud.github.com/backbone/#Controller-saveLocation

+1

दुर्भाग्य से, रीढ़ की saveLocation hashchange घटना ट्रिगर नहीं करता और मेरे पूरे आवेदन इस सुविधा की जरूरत है। मुझे आईई डीबग कंसोल 'एससीआरआईपीटी 1014: अमान्य चरित्र जावास्क्रिप्ट: 0, लाइन 1 कैरेक्टर 2; में यह त्रुटि आई है, जो आईई अदृश्य IFRAME से संबंधित प्रतीत होता है। क्या इसे ठीक करने का कोइ उपाय है? –

+0

मैंने एक और Backbone.js ट्यूटोरियल का परीक्षण किया है जो बैकबोन के इतिहास का उपयोग करता है और आईई 7 में एक ही समस्या होती है। एल्फ स्टर्नबर्ग [लिंक] (http://clients.dominic-mercier.com/backbone/) द्वारा किए गए डेमो का URL यहां दिया गया है। जैसा कि आप देख सकते हैं, जब आप किसी आइटम पर क्लिक करते हैं, तो हैश # आइटम/सी 1 में बदल जाता है और 50 एमएस के बाद # पर वापस बदल जाता है (जो हैश परिवर्तन की जांच अंतराल फ्रेम है)। शायद हम दोनों गलत बैकबोन के इतिहास का उपयोग करते हैं? क्या आप कुछ असली केस उपयोग प्रदान कर सकते हैं? –

+0

समस्या यह है कि i7 में व्यवहार अन्य ब्राउज़र से बिल्कुल अलग है।हैश टैग पेज लोड पर लोड नहीं होता है, हैश टैग अन्य ब्राउज़रों की तरह बदलाव के बाद स्वचालित रूप से इतिहास में सहेजा नहीं जाता है। मुझे लगता है कि भविष्य में इसे संबोधित करने की आवश्यकता है ताकि सभी ब्राउज़र समान व्यवहार कर सकें। – Julien

1

के साथ इस से पहले ... मज़ा पता था कि मैं सरकारी मुद्दा सूची में जॉन लीटन से इस समस्या के लिए एक समाधान पाया: https://github.com/documentcloud/backbone/issues/228

एक अधिकारी तक पैच निम्न पंक्ति के बाद

 
this.iframe.document.open().close(); 
this.iframe.location.hash = window.location.hash; 

(रीढ़ 0.3.3 में लाइन 689) backbone.js से जोड़ें:

this.iframe = $('iframe src="javascript:0" tabindex="-1" ').hide().appendTo('body')[0].contentWindow;

(मैं पूरा मैं फ्रेम टैग लिखने couldn't < & /> - इसे यहाँ की अनुमति दी isn't :))

+0

उह ... दुर्भाग्य से ब्राउज़र-बैक आईई 7 में काम नहीं करता है। –

3

समाधान है कि मैं काम करने के लिए मिला बेन Alman के hashchange plugin उपयोग करने के लिए किया गया था। बैकबोन में प्रारंभ समारोह पर जाएं। इतिहास और इसके साथ प्रारंभ समारोह के कोड को प्रतिस्थापित करें।

 
start : function() { 
    $(window).hashchange(this.checkUrl); 
    return this.loadUrl(); 
} 

और अपने कोड में हैशचेंज प्लगइन फ़ाइल शामिल करना सुनिश्चित करें।