Javascript 每5秒更新一次导航栏
我想从django服务器获取实时更新,并相应地更新视图。Javascript 每5秒更新一次导航栏,javascript,backbone.js,Javascript,Backbone.js,我想从django服务器获取实时更新,并相应地更新视图。 顶部有一个导航栏,每5秒左右需要更新一次 代码是: $(document).ready(function() { var Scores = Backbone.Collection.extend({ url: '//localhost:8000/api/live_scores' }); var Ticker = Backbone.View.extend({ el: '.page',
顶部有一个导航栏,每5秒左右需要更新一次 代码是:
$(document).ready(function() {
var Scores = Backbone.Collection.extend({
url: '//localhost:8000/api/live_scores'
});
var Ticker = Backbone.View.extend({
el: '.page',
render: function () {
var self = this;
var scores = new Scores();
scores.fetch({
success: function (scores) {
var template = _.template($('.ticker').html());
var result = template({scores: scores.models});
self.$el.html(result);
}
},this);
}
});
var Router = Backbone.Router.extend({
routes: {
"": 'home'
}
});
var ticker = new Ticker();
var router = new Router;
router.on('route:home', function() {
ticker.render(); <------------Earlier it was this
});
Backbone.history.start();
setInterval(ticker.render, 1000); <------------ Changed to this
});
$(文档).ready(函数(){
var分数=主干.Collection.extend({
url:“//localhost:8000/api/live_分数”
});
var Ticker=Backbone.View.extend({
el:“.page”,
渲染:函数(){
var self=这个;
var分数=新分数();
记分({
成功:功能(分数){
var-template=551;.template($('.ticker').html());
var结果=模板({scores:scores.models});
self.$el.html(结果);
}
},这个);
}
});
var Router=Backbone.Router.extend({
路线:{
“”:“家”
}
});
var ticker=new ticker();
var路由器=新路由器;
路由器.on('route:home',function(){
ticker.render();首先,您的间隔回调可能无法工作,因为它绑定到外部作用域。请使用.bind(this)
将其绑定到定义ticker
变量的本地作用域
setInterval(ticker.render.bind(this), 5000);
其次,这个间隔行为应该是视图本身的一部分,在主干中,它可以在视图中封装控制器的逻辑和行为(在MVC模式中)
开始间隔的适当位置是视图首次呈现时,但根据应用程序的不同,您可以在initialize
方法中启动间隔。我建议您在initilize
方法中使用类似于标志的变量,或在this.hasBeenRendered=false
中使用类似构造函数的变量,然后在第一个ren中启动间隔der()
调用start your interval并将标志标记为true
如下所示:
render: function() {
if(!this.hasBeenRendered) {
this.startTicker(); // something you like to start the interval
this.hasBeenRendered = true;
}
...
}
“元素不再可用”…哪个元素?