在路由器主干中插入定时器功能



我需要在路由器中插入一个每指定时间(例如5秒)工作一次的函数,但问题是每次我回到家时计数器都会重新启动。如果我打开我的应用程序,计数器会启动,即使我转到另一个页面,它也会正确计数,但如果我返回主页,计数器会重新启动。我试过绑定和解除绑定,但都不起作用。

这是我的路由器:

  var AppRouter = Backbone.Router.extend({
    routes: {
        "": "home",
        "user/:id":"userDetails",
        "settings":"settings",
        "friends":"friends",
        "mailbox":"mailbox",
        "landscape":"landscape"
    },
   initialize:function(){
   $(window).bind('onload', setInterval(function(){alert("Hello")},5000));<---------
   $(window).unbind('onload');   <---------
   },

    home: function() {

 if (Parse.User.current()){
       var user=new Person();
       user.savePosition();
       new BarraScreamView();
       new MenuView();

    }
    else 
     new LoginView();
    },

 userDetails: function (id) {
     console.log(id);
     console.log(Models.utenti.get(id));
     var page=new UserDetailView({model:Models.utenti.get(id)});
     this.changePage(page);
  },   

修改url中的片段标识符(www.example.com/#fragment)不会导致重新加载页面。另一方面,如果删除片段标识符,则会重新加载页面。

我认为,当你说"每次我回家"时,你的意思是每次修改url以没有碎片时,问题就会出现。

如果您添加一条新的路线#home,并访问example.com/#home而不是仅访问example.com/,则问题应该得到解决。

routes: {
    "": "home",
    "home": "home",
    ...
}

编辑:您也可以只使用example.com/#作为主路由,而不更改路由对象)

p.S.

由于Router.initialize()应该只被调用一次,所以这段代码应该足以用于init:

initialize:function(){
  setInterval( function(){ alert("Hello") }, 5000 );
}

最新更新