2012-05-06 24 views
1

有些人可以帮我弄清楚为什么我的JavaScript HTML模板不会自动更新时间,但常规的HTML呢?下面是我使用的模板库:https://github.com/blueimp/JavaScript-Templates制作自动更新,Facebook风格的时间格式

这里是我的JS(你可以在这里捣鼓:http://jsfiddle.net/trpeters1/SpYXM/76/):

$(document.body).on('click', 'button', function(){ 
    var id= $(this).data('id'); 
    var data={id:id, string: "just now...", fxn: nicetime()};  
    var result = tmpl('<div id="string" data-id="'+id+'">{%=o.string%}</div><div id="function" data-id="'+id+'">{%=o.fxn%}</div>', data);  
    $('div[data-id="'+id+'"]').html(result); 
    nicetime(); 
}); 

function nicetime(){ 
    var time = new Date(), 
    var comment_date = setInterval(function() { 
    var time2 = time_since(time.getTime()/1000); 
    $('#time_since').html(time2); 
    return time2; 
    }, 
    1000); 
} 

HTML:

<button data-id="1">1</button> 
<div data-id="1"></div> //tmpl output 
<div id="time_since"></div> //non-tmpl output 
+0

jQuery的data()函数没有任何数据做属性,只需使用ATTR()。 – Musa

+0

@Musa谢谢,你有关于setInterval问题的建议吗? –

回答

3

你想要的东西像this

使用JavaScript模板,您通常要模板一次,然后动态更新特定元素的值,而不是每秒重置整个元素的innerHTML。

这里的JavaScript的:

$(document.body).on('click', 'button', function(){ 
    var id= $(this).val(), 
     time = +new Date, 
     data = { 
      id: id, 
      string: "just now..." 
     },  
     result = tmpl('<span class="string">{%=o.string%}</span>', data), 
     tgt = $('#'+id), 
     str; 
    tgt.html(result);  
    str = tgt.find('.string'); 
    window.setInterval(function() { 
     str.html(time_since(time/1000)); 
    }, 1000); 
}); 
+0

真棒,让我调查一下更近一点,但认为这将工作! –

+0

好吧,现在我明白了。保持模板值为字符串,然后在模板放下后,在这些值上查找并运行setInterval。谢谢! –