2013-01-08 81 views
0

這兩種處理路由的方法有什麼區別?骨幹路由在路由之間循環往返右路之一

var Router = Backbone.Router.extend({ 
    routes: {'home': 'showHome}, 
    showHome: function() {//do whatever} 
}); 

var Router = Backbone.Router.extend({ 
    routes: {'home': 'showHome}, 
    initialize: function() { 
     var router = new Router(); 
     router.on('route:showHome', function(){//do something}); 
    } 
}); 

目前,我有它的第二種方式。它工作正常,我得到正確的地方..

我的路由器現在正確設置(我認爲),但我的路線仍然是怪異的(如下)。

我遇到的唯一問題是,當它改變路由時,地址欄會在多個不同路由之間閃爍,然後它會出現在正確的頁面上(始終到達正確的位置)。

我正在改變頁面內使用window.location = '#/route';裏面的jQuery偵聽器內我的意見。

$('#right_arrow').live('click', {view: that}, this.rightArrow); 
... 
rightArrow: function(e){ 
    var that = e.data.view; 
    if(typeof window.easyUserData.fbResponse.authResponse === 'undefined') { 
     // Not logged in 
     window.location = '#/login'; 
    } else { 
     // Logged in 
     window.location = '#/notes/right'; 
    } 
    return false; 
} 

我一直在努力調試和我發現,當我在window.location = '#/notes/right';設置斷點:正確

  1. URL變化(「#/註釋/右」)
  2. 返回假執行
  3. 右箭頭函數結束和調試程序進入jQuery代碼
  4. 經過五或六''在調試器(仍然在jquery代碼中)跳過的URL更改爲'#/ news/right',這是一個nother路線我使用但不知道爲什麼它會來這裏
  5. 經過幾個'步驟'我們回到原來的斷點,在那裏url更改爲正確的'#/ notes/right'
  6. 新的查看負載

爲什麼它的行爲如此?這與我如何設置路由器有關嗎?

回答

1

你的代碼在初始化函數中實例化一個新的路由器,這是在該特定對象被實例化時開始時調用的。基本上,你正在創建一個不必要的路由器。

第一個例子中的代碼是正確的。然後你簡單地做:

var myRouter = new Router(); 
+0

是的,這是有道理的,因爲我正在寫這個,我在想這個,我跟着一個教程,但是這樣做更有意義。這並不能解釋爲什麼它會暫時將其他路由加載到URL中 –