我需要在路由器中插入一个每指定时间(例如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 );
}