Backbone.jsを使用すると、ルータを元の場所に移動することはできますか?ポップアップが表示されたときにURLを変更し、ポップアップを非表示にしたときにそのURLを変更したい場合に使用します。ポップアップを表示する前にバックグラウンドページを正確に同じ位置に保ちたいので、私は単に元に戻ってはいけません。Backbone.jsを使用してurlを以前のものにサイレントに変更する
答えて
あなたはBackbone.Router
を延長し、ナビゲーション中のすべてのルートを格納することによってこの問題を解決することができます。あなたのモーダルを却下しなければならないとき
class MyRouter extends Backbone.Router
constructor: (options) ->
@on "all", @storeRoute
@history = []
super options
storeRoute: ->
@history.push Backbone.history.fragment
previous: ->
if @history.length > 1
@navigate @history[@history.length-2], true
そして、単にそれが戻って最後の「ハッシュ」にリダイレクトされますMyRouter.previous()
メソッドを呼び出します。
あなたのポップアップまたはオーバーレイのonCloseEventでルートをトリガーすることができます:
router.navigate('/lasturl/');
これでURLが設定されます。 2番目のパラメータとしてtrueを渡すと、routesアクションも実行されます。それ以外の場合、ページは変更されません。
もちろん、最後のURLがどのようにわかるのですか。バックボーンは便利な方法を提供していますか、それともwindow.historyから取得する必要がありますか? – user802232
私はmateusmasoの答えはほとんど正しいと思っていますが、あなたが探している正しいURLを常に得ることができます。
まずあなたがbeforeRouteメソッドの火を持っているルートメソッドをオーバーライドする必要があります。
route: (route, name, callback) =>
Backbone.Router.prototype.route.call(this, route, name, =>
@trigger('beforeRoute')
callback.apply(this, arguments)
)
次にあなたがイベントを結合して、歴史のインスタンス変数を初期化します。
initialize: (options) ->
@history = []
@on "beforeRoute", @storeRoute
次のヘルパーメソッドを作成しますフラグメントの保存と取得:
storeRoute: =>
@history.push Backbone.history.fragment
previousFragment: =>
@history[@history.length-2]
最後に、再ロードせずにURLを変更して結果のフラグメントを保存するために使用できる最終的なヘルパーメソッドが1つ必要です。ポップアップを閉じるときにこれを使用する必要があります。そうでない場合は、ユーザーが他の場所をナビゲートしなくてもポップアップを再び表示した場合、ヒストリに期待されるフラグメントはありません。これは、 "trigger:true"を指定しないでnavigateを呼び出すと、イベントハンドラがトリガされてフラグメントを格納しないためです。
changeAndStoreFragment: (fragment) =>
@navigate(fragment)
@storeRoute()
この回答は質問には当てはまらないかもしれませんが、ほとんど同じ問題です。後続のスラッシュのために、私は前のルートまたはカスタムルートに静かにナビゲートできませんでした。ルート機能が起動されないようにするには、{trigger:false}
を使用するか、またはfalse
がデフォルトの動作であるためにトリガーを使用しないでください。ルートが '#/ something'(スラッシュに注意してください)の代わりに#something
で始まることを確認するか、ルータ部分のBackbone.js内のregExを変更してください。
- 1. BACKBONE.JS - の例として、以下のものを使用してmodel.validate失敗に
- 2. .slice(start、end)に相当するものを使用してbackbone.jsコレクションを変更する方法
- 3. Javascript。以前のものに基づいてフォームオプションを変更します
- 4. phpを使用してURLのサブフォルダを変更するには
- 5. 使用しているurlパターンの名前に応じて、私のviews.pyの変数を変更したい
- 6. Backbone.jsモデルが「部分的に」サイレントに変更されるようにしますか?
- 7. Backbone.js&Handlebars.jsを使用して相対URLを作成する
- 8. htaccessを使用してURLフォーマットを変更するには
- 9. html属性をダウンロードしても外部URLを使用してファイルの名前が変更されない
- 10. awkを使用して以前の値に基づいてCSVの値を変更します
- 11. POST後にExpressJSを使用してURLを変更します
- 12. Laravel 5.5リダイレクトの前にURLを変更
- 13. 以前の入力で以前のプロセスを可能な入力数に適用するスクリプトを変更する
- 14. wordpressのサイトスルー変更(DBで変更)が、以前のURLをまだ指しているリンク
- 15. Backbone.jsとRailsを使用して一連のレコードを更新するには?
- 16. RingtoneManagerを使用して通知をサイレントにする方法
- 17. Mod Rewriteを使用してサイトのURLを変更する
- 18. パラメータを使用してsymfonyフォームのURLを変更する
- 19. angular2 router.subscribeを使用してURLの変更を確認する
- 20. URLを使用してJavascript変数を変更する
- 21. Backbone.jsを使用して保存時に更新を表示するには
- 22. バインドイベントにも変更URL
- 23. Backbone.jsで経路を変更する前に機能を実行する
- 24. nginxを使用してURLの一部を変更します。
- 25. リンカスクリプトを使用してシンボルの名前を変更する
- 26. Nodejsを使用してファイルの名前を変更する
- 27. BACKBONE.JSローカルストレージ、私は意志BACKBONE.JS使用してモバイルアプリケーションを構築しようとしているサーバーの前払い
- 28. re.subは以前にコピーされた文字列のリストも変更します
- 29. Backbone.jsでハッシュとハッシュ以外のURLを結合する
- 30. perlを使用してURLを前のURLにリダイレクトする方法
実際には穴の履歴の代わりに最後の「ハッシュ」を保存するだけでもいいです – mateusmaso
ありがとう!まさに私が探していたもの。 – Felipe
これは、storeRouteメソッドが、それを使用するルーティングメソッドの前に常に呼び出されることを保証するものではないと思います。その結果、履歴に格納されているものは一貫していません。 – DrewB