9

私はバックボーンアプリを持っています。Backbone.historyを使用して、戻るボタンを使用できるようにしています。ユーザーからの入力を必要とするポップアップを自動ロードするページ(設定)があります。ユーザーがキャンセルを選択した場合は、前のページに戻ります。window.history.back()を使用してこれを行うことができます。

問題は、ユーザーがブラウザにURLを入力して、別のURL(googleなど)からそのページ(app#settings)に直接アクセスした場合、ユーザーを戻るのではなく、ホームページ(app /)にリダイレクトしたいということです。グーグルへ。

私はこれを行う方法を見つけることができませんでした。Backbone.historyは、ブラウザーの戻るボタンからの情報を格納しているように見えるため、アプリにアクセスしたばかりの場合でも履歴があります。また、以前のURLを表示する方法が見つかりませんでした。

これは可能ですか?

4

2 に答える 2

24

独自のメソッドで戻るナビゲーション ロジックをラップします。おそらくルーター上で:

var AppRouter = Backbone.Router.extend({

  initialize: function() {
    this.routesHit = 0;
    //keep count of number of routes handled by your application
    Backbone.history.on('route', function() { this.routesHit++; }, this);
  },

  back: function() {
    if(this.routesHit > 1) {
      //more than one route hit -> user did not land to current page directly
      window.history.back();
    } else {
      //otherwise go to the home page. Use replaceState if available so
      //the navigation doesn't create an extra history entry
      this.navigate('app/', {trigger:true, replace:true});
    }
  }
});

そして、ルーター メソッドを使用して戻ります。

appRouter.back();
于 2013-02-13T19:31:49.457 に答える
3

jevakallioから同じ回答を使用しましたが、コメンターの Jay Kumar が抱えていたのと同じ問題がroutesHitありappRouter.back()ました。

var AppRouter = Backbone.Router.extend({

  initialize: function() {
    this.routesHit = 0;
    //keep count of number of routes handled by your application
    Backbone.history.on('route', function() { this.routesHit++; }, this);
  },

  back: function() {
    if(this.routesHit > 1) {
      //more than one route hit -> user did not land to current page directly
      this.routesHit = this.routesHit - 2; //Added line: read below
      window.history.back();
    } else {
      //otherwise go to the home page. Use replaceState if available so
      //the navigation doesn't create an extra history entry
      if(Backbone.history.getFragment() != 'app/') //Added line: read below
        this.routesHit = 0; //Added line: read below
      this.navigate('app/', {trigger:true, replace:true});
    }
  }
});

そして、ルーター メソッドを使用して戻ります。

appRouter.back();

追加された行:

1 つ目: から 2 を引くroutesHitと、「戻る」ページにリダイレクトされたときに 1 が得られるため、実際にはマイナス 1 を行ったようになります。

2 つ目: ユーザーが既に「自宅」にいる場合、リダイレクトは行われないため、何もしないでくださいroutesHit

3 つ目: ユーザーが開始した場所にいて、「ホーム」に戻されている場合は、 を設定しroutesHit = 0、「ホーム」にリダイレクトさroutesHitれると再び 1 になります。

于 2015-09-04T01:09:41.343 に答える