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

标签 javascript backbone.js

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

这是我的路由器:

  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);
  },   

最佳答案

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

我假设当您说“每次我回家时”时,您的意思是每次修改网址以使其不存在片段时,就会出现问题。

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

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

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

附注

由于 Router.initialize() 应该只被调用一次,因此这段代码应该足以满足 init 的需求:

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

关于javascript - 在路由器主干中插入定时器功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18084264/

相关文章:

backbone.js - 链接中的 anchor

javascript - 主干集合获取渲染在第一次加载时使用路由器运行两次

jquery - 如何使用 Jasmine 对保存时的主干成功和错误响应进行单元测试

javascript - 异步加载下划线模板的最佳方式

javascript - 操作字符串并将其作为 html 返回

JavaScript - 从开关中获取值(value)

javascript - 如何使用 jquery 获取每英寸像素数

javascript - 下划线用换行符替换新行字符

javascript - 学习JavaScript和AngularJS的最有效方法是什么?

javascript - 按窗口和 Attr url 的类选择层次结构元素