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 正确更改('#/notes/right')
  2. 返回 false 执行
  3. 右箭头函数结束,调试器进入 jquery 代码
  4. 在调试器(仍然在 jquery 代码中)五六步“跳过”之后,url 更改为“#/news/right”,这是我使用的另一条路线,但不知道为什么会出现在这里
  5. 再“跳过”几次后,我们回到原始断点,其中 url 更改为正确的 '#/notes/right'
  6. 新视图加载

为什么会这样?这与我的路由器设置方式有关吗?

4

1 回答 1

1

您的代码正在初始化函数中实例化一个新路由器,该函数是在实例化该特定对象开始时调用的。所以本质上,你正在创建一个不必要的路由器。

第一个示例中的代码是正确的。然后,您只需执行以下操作:

var myRouter = new Router();
于 2013-01-08T00:41:46.263 回答