2014-12-30 56 views
2

我正在利用由handlebarsJS提供動力的SPA上的crossroadsJS和hasherJS。回想起來,我應該已經在Ember上建立了整個事情,但是這麼晚才重新開始並不明智。刷新hasherJS/crossroadsJS路線

我有哈希路由設置切換我的把手模板進出基於無論點擊。我可以在路線之間前後移動,沒有任何問題。但是,如果我刷新頁面,我總是會回到我的#/ home視圖。我已經對window.onhashchange和window.onbeforeunload做了一些研究,但是這些都沒有解決這個問題。

我有一個非常具體的方式來處理我的觀點。我有一個全局視圖對象構造的,像這樣:

views.procedures = function (template) { 

    this.initialize = function() { 
     this.el = $('<div/>'); 
     this.el.attr('id', 'procedures'); 
     this.el.on('click', '.returned-list li a', this.toResults); // list of API objects by name 
    }; 

    this.render = function() { 
     var parts = { 
      title: 'Procedures View', 
     }; 
     this.el.html(template(parts)); 
     return this; 
    }; 

    this.toResults = function() { 
     cache.justClicked = $(this).attr('data-id'); 

     crossroads.addRoute('procedures/{name}', function() { 
      api.endpoints.procedure(cache.justClicked); // constructed elsewhere 
     }); 
    }; 

    this.initialize(); 
}; 

我提到這一點,因爲我不能簡單地在JQuery的偵聽器添加任何類型的哈希值發生變化的$(document).ready()$(window).onhashchange

我已經通過閱讀無論是hasherJS還是crossroadsJS文檔多次,但我無法想出任何解決刷新問題的方法。預先感謝您的幫助。

回答

1

我需要您提供更多信息,但我假設你正在做的

var DEFAULT_HASH = 'home'; 

if (! hasher.getHash()) { 
    hasher.setHash(DEFAULT_HASH); 
} 

這基本上是說你的默認路由始終將是你家的路線,這就是爲什麼你在刷新當前路線時看到它。請嘗試以下操作:

var DEFAULT_HASH = 'home', url = hasher.getBaseURL(); 

if (hasher.getURL() === url) { 
    hasher.setHash(DEFAULT_HASH); 
} 

這將檢查你的基地址是多少(當您第一次訪問該頁面的加載的)和#/home路線追加到基本URL,使您可以刷新當前查看路線。

希望這會有所幫助。