Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每5秒更新一次导航栏_Javascript_Backbone.js - Fatal编程技术网

Javascript 每5秒更新一次导航栏

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',

我想从django服务器获取实时更新,并相应地更新视图。
顶部有一个导航栏,每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;
  }
  ...
}
“元素不再可用”…哪个元素?