2015-03-09 5 views
0

Я использую Rivets.js для создания таймера обратного отсчета. Первоначальный таймер обратного отсчета, но он не уменьшается каждый раз, когда вызывается setInterval. Зачем?DOM не обновляется при обновлении модели

Javascript:

function startTimer(minutes) { 
    var countdown = (60 * minutes)-1; 
    rivets.bind($('#timer'), { countdown: countdown }); 

    var timer = setInterval(function() { 

     countdown--; 

     if (countdown < 0) { 
      clearInterval(timer); 
     } 
    }, 1000); 
} 

HTML:

<div id="timer">{countdown}</div> 
+0

функция Если не заклепки обновления быть внутри функции интервала? – Mouser

+0

Вы имеете в виду 'rivets.bind'? это не действительно функция обновления, она просто привязывает модель к данным. но я попытался поместить его внутри setInterval без везения. – Jeff

+0

Как бы заклепки не знали, что обратный отсчет уменьшается? – Mouser

ответ

1

Вы должны связать Заклепки с объектом, в противном случае привязка теряется при изменении переменной:

function startTimer(minutes) { 
    var countdownObj = {}; 
    var countdown = (60 * minutes)-1; 
    countdownObj.cd = countdown; 
    rivets.bind($('#timer'), { countdown: countdownObj }); 

    var timer = setInterval(function() { 
     countdownObj.cd--; 
     if (countdownObj.cd < 0) { 
      clearInterval(timer); 
     } 
    }, 1000); 
} 

А в вашем HTML:

<div id="timer">{countdown.cd}</div> 

Проверить this plunker

+0

безупречное спасибо! Заклепки также работают с массивами javascript, поэтому я подумал, что это будет работать на ints. – Jeff

Смежные вопросы