すべてのリンクでクリックイベントを再生します。 (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
は、あなたが任意の明確化が必要な場合は、私に教えてくださいます(私はちょうど私のアプリのためにこれを実装し、それが動作します)。
私はこれが本当に質問に答えるとは思わない。彼はブラウザの戻る/進むボタンを探していました。 – mix3d
'if!window.linkClickedおよびcurrentFragment == window.previousFragment'ユーザがクリックして戻るボタンを押したときに_older_エントリが選択されると、このコードは失敗します。 –