2013-05-17 4 views
7

का उपयोग करके आगे या पिछड़ा बटन दबाया गया था, यह बताएं कि मैं कुछ शोध कर रहा हूं और ऐसा लगता है कि पॉपस्टेट घटना किसी भी समय इतिहास बदल जाती है, लेकिन ऐसा लगता है कि ऐसा नहीं लगता है यह निर्धारित करने के लिए बनाया गया है कि उपयोगकर्ता ने बैक बटन या ब्राउज़र में फॉरवर्ड बटन पर क्लिक किया है या नहीं।पॉपस्टेट ईवेंट

मेरा उपयोग मामला यह है कि इतिहास में वापस आने या इतिहास में आगे बढ़ने पर मेरे पास दिशात्मक एनिमेशन होते हैं जो AJAX अनुप्रयोग में मार्गों को स्थानांतरित करते समय होते हैं। मुझे यह निर्धारित करने की ज़रूरत है कि उपयोगकर्ता पीछे या आगे जा रहा है, इसलिए एनिमेशन समझ में आता है। यह एक शर्म की बात है कि पॉपस्टेट घटना घटना की दिशा का समर्थन नहीं करती है।

मैं यह भी उल्लेख करूंगा कि एक कोणीय विशिष्ट उत्तर होने पर मेरा आवेदन एक कोणीय जेएस एप्लीकेशन है, हालांकि एक और सामान्य उद्देश्य जावास्क्रिप्ट समाधान इष्टतम होगा।

+0

क्यों चर का उपयोग नहीं करते? बस प्रत्येक राज्य में एक वृद्धिशील राज्य आईडी सहेजें और अंतिम स्थिति की आईडी को सहेजें। पॉप-अप होने पर, पुराने राज्य और नए राज्य के बीच के अंतर की गणना करें और देखें कि उपयोगकर्ता किस दिशा में गया था। लेकिन हाँ, एक ब्राउज़र मूल कार्यान्वयन अच्छा होगा। – Kiruse

+0

हां यह समझ में आता है। मैं एप्लिकेशन को वैश्विक स्थिति में यह निर्धारित करने के लिए स्टोर कर सकता हूं कि उपयोगकर्ता किस दिशा में जा रहा है। मुझे इसके बजाय ट्रैक रखना नहीं होगा, लेकिन अगर इतिहास की दिशा निर्धारित करने का कोई तरीका नहीं है अन्यथा मुझे लगता है कि यह करने की आवश्यकता होगी। धन्यवाद! – nek4life

+1

संभावित डुप्लिकेट [यदि मैं पॉपस्टेट ईवेंट एचटीएमएल 5 पुशस्टेट के साथ पीछे या आगे की कार्रवाइयों से आता है तो मैं कैसे पुनर्प्राप्त करूं?] (Http://stackoverflow.com/questions/8980255/how-do-i-retrieve-if-the- popstate-घटना-आता-से-बैक या आगे की कार्रवाई-साथ) –

उत्तर

3

मुझे यकीन है कि जो समझ सही है नहीं कर रहा हूँ, लेकिन HTML5 pushstate की मेरी समझ से अलग है।

पुश-स्टेट समर्थन आपको ब्राउज़र के यूआरएल में बदलावों को कैप्चर करने की इजाजत देता है जो अन्यथा किसी सर्वर (आपका या किसी और के) के अनुरोध के रूप में भेजा जाएगा। इसका उद्देश्य आपको "आगे" और "पीछे" घटनाएं नहीं देना है, लेकिन सामान्य "स्थान परिवर्तन" घटनाओं की तरह अधिक है। फिर यह यूआरएल की जांच करने के लिए आपके ऐप का काम है और यह पता लगाने के लिए कि उपयोगकर्ता कहां जा रहा है।

इस बारे में सोचें: क्या होगा यदि उपयोगकर्ता ने आपके ऐप में एक लिंक पर क्लिक किया जिसे आप जावास्क्रिप्ट से संभालना चाहते थे? आपके पास कुछ ईवेंट हैंडलर सेटअप होंगे जो क्लिक को कैप्चर करेंगे और आपके ऐप को किसी भी तरह से कुशल बनायेंगे। तो क्लिक करने "वापस" या "आगे" एक लिंक पर क्लिक तरह है, लेकिन तुम सब मिल URL जिस पर उपयोगकर्ताओं को देखने के लिए कोशिश कर रही है - वहाँ के लिए घटनाओं के लिए बाध्य करने के लिए कोई लिंक भी है।

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

MyAppRouter = Backbone.Router.extend({ 
    routes: { 
     'home': 'setupHomeScreen', 
     'recipes': 'setupRecipesList', 
     'recipes/:id': 'setupRecipeScreen' 
    }, 

    setupHomeScreen: function() { 
     // ... 
    }, 

    setupRecipesList: function() { 
     // ... 
    }, 

    setupRecipeScreen: function(id) { 
     // ... 
    }, 

    // ... 

}); 

कृपया एक कोणीय पर रीढ़ कोड बहाना:

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

अपने प्रश्न

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

var viewHistory = []; 

// ... they visited the recipe list. push it into the history 
viewHistory.push('recipeList'); 

// ... they visited a particular recipe. push it into the history 
viewHistory.push('recipe:13'); 

// ... they clicked the "back" button. we know from the URL that they want 
// the recipeList, but we don't know if they're trying to go forward or back. 
var nextView = 'recipeList'; 
if (viewHistory.indexOf(nextView) > 0) { 
    // *** Back Button Clicked *** 
    // this logic assumes that there is never a recipeList nested 
    // under another recipeList in the view hierarchy 
    animateBack(nextView); 

    // don't forget to remove 'recipeList' from the history 
    viewHistory.splice(viewHistory.indexOf(nextView), viewHistory.length); 
} else { 
    // *** They arrived some other way *** 
    animateForward(nextView); 
} 
संबंधित मुद्दे