Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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计时器_Javascript_Backbone.js_Timer - Fatal编程技术网

一个精确的Javascript计时器

一个精确的Javascript计时器,javascript,backbone.js,timer,Javascript,Backbone.js,Timer,我一直在尝试使用主干JS制作一个准确的JavaScript计时器,这是我所能做到的: 它的工作原理与完整的事件无关。当它不应该触发两次时,有没有关于我需要做什么来修复/改进它的想法 控制台输出: "tick 10 1" "tick 10 2" "tick 10 3" "tick 10 4" "tick 10 5" "tick 10 6" "tick 10 7" "tick 10 8" "tick 10 9" "complete 10 10" "complete 10 11" 您正在调用sta

我一直在尝试使用主干JS制作一个准确的JavaScript计时器,这是我所能做到的:

它的工作原理与完整的事件无关。当它不应该触发两次时,有没有关于我需要做什么来修复/改进它的想法

控制台输出:

"tick 10 1"
"tick 10 2"
"tick 10 3"
"tick 10 4"
"tick 10 5"
"tick 10 6"
"tick 10 7"
"tick 10 8"
"tick 10 9"
"complete 10 10"
"complete 10 11"

您正在调用
start()
两次。在创建模型和视图之后,以及在视图内部初始化函数之后调用一次。

您将调用
start()
两次。在创建模型和视图之后,以及在视图内部初始化函数之后调用一次。

您将调用
start()
两次。在创建模型和视图之后,以及在视图内部初始化函数之后调用一次。

您将调用
start()
两次。一次在创建模型和视图之后,一次在视图初始化函数中。

您调用了两次
start
,一次在
TimerView中。初始化
,一次在实例化它之后,这意味着您有两个并发的
setTimeout
循环发生(并且,您的计时器移动速度是原来的两倍):

var Timer=Backbone.Model.extend({
/* ... */
});
var TimerView=Backbone.View.extend({
/* ... */
初始化:函数(){
this.model.on('tick',函数(e){console.log('tick'+e.steps+''+e.count);},this);
on('complete',function(e){console.log('complete'+e.steps+''+e.count);},this);

this.model.start();//您要调用
start
两次,一次在
TimerView.initialize
中,一次在实例化后,这意味着您有两个并发的
setTimeout
循环发生(而且,您的计时器移动速度是原来的两倍):

var Timer=Backbone.Model.extend({
/* ... */
});
var TimerView=Backbone.View.extend({
/* ... */
初始化:函数(){
this.model.on('tick',函数(e){console.log('tick'+e.steps+''+e.count);},this);
on('complete',function(e){console.log('complete'+e.steps+''+e.count);},this);

this.model.start();//您要调用
start
两次,一次在
TimerView.initialize
中,一次在实例化后,这意味着您有两个并发的
setTimeout
循环发生(而且,您的计时器移动速度是原来的两倍):

var Timer=Backbone.Model.extend({
/* ... */
});
var TimerView=Backbone.View.extend({
/* ... */
初始化:函数(){
this.model.on('tick',函数(e){console.log('tick'+e.steps+''+e.count);},this);
on('complete',function(e){console.log('complete'+e.steps+''+e.count);},this);

this.model.start();//您要调用
start
两次,一次在
TimerView.initialize
中,一次在实例化后,这意味着您有两个并发的
setTimeout
循环发生(而且,您的计时器移动速度是原来的两倍):

var Timer=Backbone.Model.extend({
/* ... */
});
var TimerView=Backbone.View.extend({
/* ... */
初始化:函数(){
this.model.on('tick',函数(e){console.log('tick'+e.steps+''+e.count);},this);
on('complete',function(e){console.log('complete'+e.steps+''+e.count);},this);

this.model.start();//把你的代码放在你的问题里。如果我读对了,你好像叫了两次start。把你的代码放在你的问题里。如果我读对了,你好像叫了两次start。如果我读对了,你好像叫了两次start。把你的代码放在你的问题里。如果我读对了,你好像叫了两次start不对。
var Timer = Backbone.Model.extend({
  /* ... */
});

var TimerView = Backbone.View.extend({
  /* ... */
  initialize: function () {
    this.model.on('tick', function(e){console.log('tick '+e.steps+' '+e.count);}, this);
    this.model.on('complete', function(e){console.log('complete '+e.steps+' '+e.count);}, this);
    this.model.start(); // <-- One here
  }
});

var timer = new Timer();
var timerView = new TimerView({model: timer});
timer.start();  // <-- Another here
var TimerView = Backbone.View.extend({
    model: Timer,
    tagName: 'p',
    className: 'timer',
    initialize: function () {
        this.model.on('tick', function(e){console.log('tick '+e.steps+' '+e.count);}, this);
        this.model.on('complete', function(e){console.log('complete '+e.steps+' '+e.count);}, this);
        /* this.model.start(); - don't need this */
    }
});