Backbone.History.fragment在路由器事件回调中未定义

时间:2012-09-07 06:52:21

标签: javascript backbone.js

我的代码试图跟踪Backbone js应用程序中的当前片段。

$(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 个答案:

答案 0 :(得分: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显示了其他方法。