私はこの非常に便利な 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);
}
注:内部にはjsfiddlenicetime()
で使用できる関数time_since()
があります。「1秒前...」のように日付をフォーマットするためのものです。