2

我正在使用这个非常方便的 JavaScript 模板库:https ://github.com/blueimp/JavaScript-Templates 。我可以像使用 underscore.js 和 mustache.js 一样创建元素并向它们添加数据。

当我想添加自己的函数而不仅仅是将字符串添加到将填充模板的各个节点的对象时,我的问题就出现了。我想做的是运行函数nicetime()来更新我新插入的时间,<div>'s而不是只显示一次时间。

这是代码和完整的演示

HTML:

<button data-id="1">1</button>
<div data-id="1"></div>
<div id="time_since"></div>

JS:

$(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);
}

注意:里面nicetime()有一个jsfiddletime_since()上可用的功能。它用于像这样格式化日期:“1 秒前……”。

4

1 回答 1

1

在 javascript 中,函数是对象,就像任何其他变量一样。

您的问题是您正在调用该函数而不是将其分配给属性。

var data={id:id, string: "just now...", fxn: nicetime()}; 

而是仅使用函数名(不带括号)

var data={id:id, string: "just now...", fxn: nicetime}; 

编辑其实我还是会采取不同的方法。无需使用计时器,只需像以前一样调用该方法:

var data={id:id, string: "just now...", fxn: nicetime(this)};       

$('div[data-id="'+id+'"]').html(result);   
nicetime(this);

我修改了 nicetime 以获取跟踪时间的元素(我假设每个节点都有一个按钮(否则数据将存储在每个节点上)

function nicetime(el){
    var time =  $(el).data('start') || new Date();
    var time2 = time_since(time.getTime()/1000);
    $('#time_since').html(time2); 
    var comment_date = time2; //still need to figure out where to put this value
    $(el).data('start', time)
    return comment_date;
}
于 2012-05-05T14:06:06.680 回答