2012-07-23 71 views
0

後取消綁定事件我想,當我改變頁面取消綁定的所有事件。我把this solution與this.unbind()調用擴展視圖的關閉功能,我試圖把它與JQM頁面過渡在changePage功能的路由器從here結合:骨幹和jQuery Mobile的:一個頁面過渡

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 

我也有JQM-config.js其刪除頁面的DOM上pagehide甚至噸。我可以解除所有事件:$(event.currentTarget).unbind();?但是這也行不通。

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

回答

1

我有同樣的問題。發生JQM錯誤的原因是您嘗試在close()骨幹擴展方法中調用this.remove(),但事件「pagehide」已將該視圖從DOM中刪除。

Backbone.View.prototype.close = function() { 
    if (this.beforeClose) { 
     this.beforeClose(); 
    } 
    this.remove(); 
    this.unbind(); 
}; 

如果您在接近方法評論this.remove(),它的工作原理。

另一種選擇是評論$(event.currentTarget).remove();pagehide jqmobile事件和密切方法不做評論this.remove()

你不能兩者都做,你應該選擇的兩個選項之一。我更喜歡第二種選擇,但我認爲它與第一種選擇類似。我不建議在頁面隱藏事件上致電unbind()

0

我面臨同樣的問題,由於某些原因,pagechange事件沒有被解僱,前幾頁沒有從DOM中刪除。一旦我刪除了非活動頁面,CSS就開始執行了。

所以我添加

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

 $(document).bind('pagechange', function() { 

    }); 

所以我JQM-config.js看起來像這樣

$(document).bind("mobileinit", function() { 
    console.log('mobileinit'); 
    $.mobile.ajaxEnabled = false; 
    $.mobile.linkBindingEnabled = false; 
    $.mobile.hashListeningEnabled = false; 
    $.mobile.pushStateEnabled = false; 
//$.mobile.defaultPageTransition = "none"; 
}); 

    $(document).bind('pagechange', function() { 
    $('div[data-role="page"]').bind('pagehide', function (event, ui) { 
     console.log("Removing page"); 
     $(event.currentTarget).remove(); 
    }); 
}); 

我花了幾個小時,this SO跟帖得到這個。希望這可以幫助某人。