2016-05-04 49 views
0

在我的backbone.js項目中,我需要一種僅在window.location.hash更改時才觸發的方法。我爲here發現了一些替代解決方案。如何在backbone.js事件委託中使用「hashchange」事件?

另外,我可以通過如下

Backbone.View.extend({ 
    initialize() { 
     $(window).on('hashchange',()=> { 
      console.log('yes hashchange events works') 
     }); 
    } 

在我的骨幹視圖initialize function創建一個事件解決這個問題,但我尋找它採用backbone.js'seventDelegateslistenTo

在此先感謝

的解決方案

回答

2

您可以在此範圍內使用Backbone.history

歷史作爲全球路由器(每幀)來處理hashchange 事件或pushState的,匹配合適的路線,並引發 回調。因爲Backbone.history已經包含了一個,所以您不應該自己創建其中的一個 。

,因爲它觸發一個回調,您可以偵聽hashchange事件:

Backbone.history.on("all", function (route, router) { 
    console.log(window.location.hash); 
}); 

Backbone.history.on("route", function() { 
    console.log(window.location.hash); 
}); 
+0

非常感謝。這就是竅門:) –

+1

它不適合我,不幸的是,爲'Backbone.history'的'hashChange'選項設置爲'false',但是這個解決方法沒有辦法: ' window.addEventListener('hashchange' ,this.handleHashChange);' – RZ87

0

試試這個初始化函數:

window.addEventListener('hashchange', function { 
    var currentHash = location.hash; 

    console.log('currentHash', currentHash); 
})