2012-07-06 11 views
6

私はモーダルポップアップを開いて、URLを変更します。ユーザーがポップアップを閉じると、前のURLに戻りたいが、そのURLに関連付けられたルートをトリガーしたくないので、それはコレクションをリロードしてビューをレンダリングするためです。window.history.back()をトリガーなしで呼び出す方法はありますかルート、またはこれに相当するバックボーンがありますか?私は考えることができるBackbone.historyを使用してルート機能を起動せずに戻る

唯一の解決策は、モーダルが閉じたコール

Backbone.history.navigate(route, {trigger: false, replace: true}); 

であるが、これは簡単な問題を解決するための複雑な方法のように思えるときに、以前のルートを保存することです。

+1

私の提案(あなたの質問に全く答えられないのは残念ですが)は、ポップアップが表示されている間にあなたのページにブックマークを付けるとどうなるかを検討することです。彼らがhttp://yoursite.com/#popup/routeに直接戻ると、奇妙な動作をする可能性があります。奇妙な動作をしなければ、モーダルダイアログを閉じるとどうなりますか?私の経験では、これらの理由からモーダルダイアログを表示するためにルータを使用していません。これが理にかなってほしい。 – timDunham

+0

ページをブックマークしてからyoursite.com/#popup/routeに戻った場合、yoursite.com/popup/routeでそのポップアップの静的なHTMLバージョンにリダイレクトされるので、ポップアップを閉じるオプションはありません。 – Barny

答えて

5

ルータの履歴を保存することは良い解決策のように思えますが、この問題を解決するには良い方法を見つけられませんでした。それは次のようになりますので、私はマイナーな微調整を行うだろう Silently change url to previous using Backbone.js

ことの良い解決策はここにある

class MyRouter extends Backbone.Router 

    initialize: (options) -> 
    @on "all", @storeRoute 
    @history = [] 

    storeRoute: -> 
    @history.push Backbone.history.fragment 

    previous: -> 
    if @history.length > 1 
     @navigate @history[@history.length-2], false 
    else 
     @navigate '', true 

次に、あなただけの(MyRouter.previousを呼び出すことができます)、およびもしあなたが直接要求したのであれば、それはあなたをあなたのルートに連れて行きます。

ルータのデフォルト機能であって、少なくとも5つの最終ルートを保持するようにしたいと思っています。

関連する問題