0

PhoneGap アプリケーション内で Backbone を使用しています。すべてのモバイル アプリと同様に、戻るボタンの機能が必要です。基本的に Backbone とは完全に連携していwindow.history.back()ます。

唯一の問題は、いつ戻るボタンを表示するかを決めることです。使用window.history.length時にデクリメントされないため、使用は機能しませんback()(もちろん、同様に実行できるためforward())。

さらに履歴があるかどうか、または既にスタックの一番下にいるかどうかを検出する方法はありますか? ブラウザはこの情報を提供していないように見えるので (ユーザーがブラウザの履歴に戻ることができるかどうかを確認する方法)、バックボーンはこれを追跡しますか?

4

3 に答える 3

4

このようなものはかなり簡単に実装できます

Backbone.history.length = 0;
Backbone.history.on('route', function () { ++this.length; });
myRouter.back = function () {
  Backbone.history.length -= 2;
  window.history.back();
};

そして、myRouter.back()戻るために使用します。

于 2013-01-30T15:42:40.090 に答える
2

Casey Foster の答えは一見すると良さそうに見えますが、欠点がrouter.navigateありtriggerます。replacetrue

私はもっ​​と簡単な解決策を思いつきました。基本的に、戻るボタンを必要としないルートは 1 つしかなく、それがindexルートです。したがって、私のコードは次のようになります

Backbone.history.on('route', _.bind(function(router, route) {
    if(route === 'index') {
        this.$el.removeClass('has-back-button');
    } else {
        this.$el.addClass('has-back-button');
    }
}, this));
于 2013-01-30T16:39:34.107 に答える
0

@CaseyFosterの回答に基づいて、自分で履歴を追跡できます。独自の戻るボタンに加えて、デバイスのハードウェアの戻るボタンを押す必要があります。

PhoneGap は、次のbackbuttonイベントを提供します。

document.addEventListener("backbutton", function() {
  Backbone.history.length -=2;
}, false);

Backbone.history.lengthCasey Foster's answer で定義されていることに注意してください。これはバックボーン自体の一部ではありません。

于 2013-01-30T16:18:40.270 に答える