HTML:
<div class="leaderboard">
{{#each players}}
{{> player}}
{{/each}}
</div>
<template name="player">
<div class="player {{selected}}">
<span class="name">{{name}}</span>
<span class="score">{{score}}</span>
<span class="joindate">{{joindate}}</span>
</div>
</template>
JS:
Players = new Meteor.Collection("players");
if (Meteor.isClient) {
Template.players = function () {
return Players.find();
};
}
if (Meteor.isServer) {
Meteor.startup(function () {
if (Players.find().count() === 0) {
var names = ["Ada Lovelace",
"Grace Hopper",
"Marie Curie",
"Carl Friedrich Gauss",
"Nikola Tesla",
"Claude Shannon"];
for (var i = 0; i < names.length; i++)
Players.insert({name: names[i],
score: Math.floor(Random.fraction()*10)*5,
joindate: new Date().getTime()
});
}
});
}
从上面的示例中,我将joindate存储为unix时间戳。在返回Template.players函数之前,如何将连接日期变量格式化为Collection.find结果中的可读日期。
我知道我可以在insert命令中格式化日期,但我的问题是如何在传递给模板之前操作/格式化collection.find中的数据。
答案 0 :(得分:2)
您可以在创建Collection
时传递transform
function:
var Players = new Meteor.collection('players', {
transform: function(doc) {
doc.joindateStr = (new Date().getTime()).toString();
return doc;
}
});
然后在模板中使用joindateStr
。或者您可以将joindate
本身覆盖为Date
对象。
transform
函数将应用于find
和findOne
返回的所有文档。它也可以在第二个参数传递给find
或findOne`明确地传递。