2012-09-07 50 views
4

我的代碼試圖跟蹤Backbone js應用程序中的當前片段。Backbone.History.fragment在路由器事件回調中未定義

$(function(){ 
    Backbone.history.start({pushState: true}); 
    console.log("fragment " + Backbone.history.fragment); 
    // Beef is a global that holds my router (created elsewhere) 
    Beef.router.bind("all", function(route) { 
     console.log("fragment from event handler " + Backbone.history.fragment); 
    }); 
}); 

此代碼按預期打印'fragment xxx',但在應用程序中導航時始終打印'來自事件處理程序undefined'的片段。

如果我複製到Backbone.History本地VAR第一它的工作原理:

$(function(){ 
    Backbone.history.start({pushState: true});  
    console.log("fragment " + Backbone.history.fragment);  
    var hist = Backbone.history;  
    Beef.router.bind("all", function(route) { 
     console.log("fragment from event handler " + hist.fragment); 
    }); 
}); 

有人能解釋什麼怎麼回事?

+1

我剛剛在我正在處理的應用程序中嘗試了這一點,第一個示例工作正常(即正確返回片段)。你能爲此創建一個jsfiddle以確保它不是特定於配置的問題嗎? –

+0

Ack。我會盡力將其抽取成小樣本。希望我只是做一些小事。 –

回答

0

這可能是一個JavaScript變量捕獲問題?例如,不這樣做的幫助:

$(function(){ 
    Backbone.history.start({pushState: true});  
    console.log("fragment " + Backbone.history.fragment);  

    (function(hist) { 
     Beef.router.bind("all", function(route) { 
      console.log("fragment from event handler " + hist.fragment); 
     }); 
    })(Backbone.history); 
}); 

其他一些JavaScript變量捕捉answers的展示等方式來做到這一點。