0

ページを変更するときに、すべてのイベントのバインドを解除したい。ビューの close 関数をthis.unbind() 呼び出しで拡張するこのソリューションを採用し、ここからルーターの changePage 関数で JQM ページ遷移と組み合わせようとしました。

changePage: function(page){
        $(page.el).attr("data-role", "page");
        page.render();
        $("body").append($(page.el));
        var transition = $.mobile.defaultPageTransition;
        if(this.firstPage){
            transition = "none",
            this.firstPage = false;
        }
        $.mobile.changePage($(page.el), {changeHash: false, transition: transition});
    }

次に、changePage は次のようになります。

changePage: function(page){
        if (this.currentView)
            this.currentView.close();
        $(page.el).attr("data-role", "page");
        this.currentView = page;
        page.render();
        $("body").append($(page.el));
        var transition = $.mobile.defaultPageTransition;
        if(this.firstPage){
            transition = "none",
            this.firstPage = false;
        }
        $.mobile.changePage($(page.el), {changeHash: false, transition: transition});
    }

しかし、その後、JQM エラーが発生します。

Uncaught TypeError: Cannot call method '_trigger' of undefined jquery.mobile-1.1.0.js:2788
transitionPages jquery.mobile-1.1.0.js:2788
$.mobile.changePage jquery.mobile-1.1.0.js:3390
window.AppRouter.Backbone.Router.extend.changePage

pagehide イベントでページの DOM を削除する jqm-config.js もあります。ここですべてのイベントを次のようにバインド解除でき$(event.currentTarget).unbind();ますか? しかし、これもうまくいきません。

  $('div[data-role="page"]').live('pagehide', function (event, ui) {
    $(event.currentTarget).remove();
});
4

2 に答える 2