2012-01-05 17 views
15

करता हूं तो मैं स्टेटमेंट बदल रहा हूं, मैं बैक बटन को संभालने के लिए history.js का उपयोग कर रहा हूं। इतिहास में .js स्टेटस्चेंज जब भी मैं पुशस्टेट करता हूं तो फायरिंग होता है। क्यूं कर? History.jsजब भी मैं पुश-स्टेट

यह pull request दावों के

उत्तर

3

इस discussion on github के अनुसार, यह उम्मीद है व्यवहार History.js संशोधित किया है करने के लिए W3C चश्मा के साथ और अधिक इनलाइन किया जाना है।

+0

मिलियन धन्यवाद। मैं व्यक्तिगत रूप से इतिहास महसूस करता हूं। जेएस समाधान बेहतर है। – aWebDeveloper

12

जोड़ना चाहता था, हाँ यह History.js का अपेक्षित व्यवहार है। एक ही समय में more discussions हैं जो इस व्यवहार की आलोचना करते हैं क्योंकि यह डब्ल्यू 3 सी मानक नहीं है और कुछ भ्रम पैदा करता है।

संक्षेप में, अपने प्रश्न का उत्तर देने के लिए: History.js pushState() फ़ंक्शन अंत में राज्य विनिमय का आह्वान है।

इस समाधान के के ऊपर यह है कि आप अपने नए राज्य को केवल (धक्का) बदल सकते हैं और ऑनस्टेटchange() - फ़ंक्शन संक्रमण को संभाल सकते हैं। डाउनसाइड यह है कि आप अपवादों को संभालने में सक्षम नहीं हैं/या उन्हें ऑनस्टेटchange ईवेंट-हैंडलर में लिखना है।

मैं व्यक्तिगत रूप से इसे संभालने का डब्ल्यू 3 सी तरीका पसंद करता हूं, क्योंकि आप बैक/फॉरवर्ड बटन और पुशस्टेट के बीच अंतर कर सकते हैं। History.js देखरेख एक आंतरिक झंडा समाधान पर काम कर रहे हैं, कि आप सक्षम बनाता है इस व्यवहार को बदलने के लिए:

सूचना कैसे ऊपर कॉल [pushstate-कॉल] ट्रिगर statechange घटनाओं, अगर कुछ कारण के लिए आप नहीं चाहते हैं यह आपका statechange हैंडलर के अंदर होने की आप उपयोग कर सकते हैं निम्नलिखित:

if (History.getState().internal) { return; } 

* यह सुविधा विकास में है और केवल History.js की 'देव' संस्करण के साथ इस्तेमाल किया जा सकता! उम्मीद है कि यह भविष्य :)

9

में कुछ अन्य लोगों में मदद मिलेगी अब एक दिन के लिए यह पूरा करने की कोशिश कर के बाद, मैं अंत में यहाँ समाधान नहीं मिला: https://github.com/browserstate/history.js/issues/47#issuecomment-25750285

कोड, सुंदर लानत सरल है निम्न से उद्धृत किया गया है लिंक:

आप

History.pushState({ 
    _index: History.getCurrentIndex(), 
    someData: ... 
}, someTitle, someUrl); 

और फिर घटना बंधन में अपने राज्य को धक्का जब

History.Adapter.bind(window, 'statechange', function() { 
    var currentIndex = History.getCurrentIndex(); 
    var internal = (History.getState().data._index == (currentIndex - 1)); 
    if (!internal) { 
     // your action 
    } 
}); 
संबंधित मुद्दे