2012-04-23 15 views
9

मैं backbone.js का उपयोग करके एक ऐप लिख रहा हूं, और पृष्ठों के बीच एनिमेटिंग कर रहा हूं (आईफोन स्टाइल ui की तरह थोड़ा)। तो जब आप किसी बटन पर क्लिक करते हैं, तो अगला पृष्ठ दाईं ओर से स्लाइड करता है, और बैक बटन पर क्लिक करने से अगला पृष्ठ बाईं ओर से स्लाइड हो जाएगा। मैं राउटर का उपयोग कर ब्राउजर फॉरवर्ड और बैक बटन के साथ ऐसा करने में सक्षम होना चाहता हूं। क्या यह बताना संभव है कि कौन दबाया गया था, (आगे या पीछे) ताकि मैं सुनिश्चित कर सकूं कि एनीमेशन सही दिशा में है?बैकबोन रूटिंग यह पता लगाने के लिए कि आगे या पीछे दबाया गया है

बस स्पष्ट करने के लिए, मैं नहीं पूछ रहा हूं कि रीढ़ की हड्डी रूटिंग कैसे करें। मैं बैकबोन रूटिंग करते समय पूछ रहा हूं, आप कैसे पकड़ सकते हैं कि कौन सा बटन यूआरएल को बदल सकता है, क्या यह बैक बटन या फॉरवर्ड बटन था?

धन्यवाद

उत्तर

8

सभी लिंक पर एक क्लिक ईवेंट के लिए सुनो। (CoffeeScript)

$(document).on 'click', 'a' -> 
    window.linkClicked = true 

वैकल्पिक रूप से, आप Backbone.history.navigate() रोकना कर सकते हैं। अगर कोई इसे क्लिक करता है, तो इसका मतलब है कि वे वापस नहीं जा रहे हैं, इसलिए ध्वज को true पर सेट करें। अपने राउटर में सभी राउटर घटनाओं को सुनकर एक कार्यक्रम भी लें। हमेशा पिछले खंड (Backbone.history.getFragment()) को स्टोर करें। पिछले खंड के साथ वर्तमान खंड की तुलना करें। यदि वे समान हैं, तो जांचें कि वह ध्वज true या false पर सेट किया गया था या नहीं। यदि false पर सेट किया गया है, तो आप जानते हैं कि यह वापस था, अगर true तो यह नहीं है और किसी ने एक लिंक पर क्लिक किया लेकिन पिछले पृष्ठ पर आया। अंत में, इस ध्वज को false पर रीसेट करें।

class SnazzyRouter extends Backbone.Router 
    initialize: -> 
     # This gets triggered everytime a route event gets triggered 
     @on 'all', => 
      currentFragment = Backbone.history.getFragment() 
      window.backDetected = false # assume no back detected 

      if !window.linkClicked and currentFragment == window.previousFragment 
       window.backDetected = true 

      window.linkClicked = false # reset 
      window.previousFragment = currentFragment 

window.linkClicked = false 
window.backDetected = false 
window.previousFragment = null 

snazzyRouter = new SnazzyRouter() 

अब, यह एक सरल

# Did we go back? 
console.log "I CAN'T BELIEVE WE WENT BACK!" if window.backDetected 

अगर आप किसी भी स्पष्टीकरण की जरूरत मुझे बताएं है (मैं बस अपना ऐप्स के लिए इसकी कार्यान्वित किया है और यह काम करता है)।

+0

मुझे नहीं लगता कि यह वास्तव में प्रश्न का उत्तर देता है; वह ब्राउजर बैक/फॉरवर्ड बटन की तलाश में था। – mix3d

+0

'if! Window.linkClicked और currentFragment == window.previousFragment' यदि उपयोगकर्ता बैक बटन को क्लिक करता है और रखता है तो वह _older_ प्रविष्टि चुनता है। –

संबंधित मुद्दे