【发布时间】:2014-09-08 22:37:08
【问题描述】:
我一直在尝试做 Meteor 的排行榜示例,但我被困在第二个练习中,重新设置分数。到目前为止,我得到的最远的是:
// On server startup, create some players if the database is empty.
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});
}
});
Meteor.methods({
whymanwhy: function(){
Players.update({},{score: Math.floor(Random.fraction()*10)*5});
},
}
)};
然后使用Whymanwhy 方法,我在 if(Meteor.isClient) 中有这样的部分
Template.leaderboard.events({
'click input#resetscore': function(){Meteor.call("whymanwhy"); }
});
这样做的问题是 {} 应该选择 MongoDB 集合中的所有文档,但它却创建了一个具有随机分数的新空白科学家。为什么? {} 应该选择所有内容。我试过 "_id" : { $exists : true },但我认为这是一个杂牌。此外,它的行为与 {} 相同。
有没有更优雅的方法来做到这一点?流星网页说:
制作一个按钮,将每个人的分数重置为随机数。 (那里 已经是在服务器启动代码中执行此操作的代码。你能考虑因素吗 其中一些代码输出并在客户端和客户端上运行 服务器?)
好吧,首先在客户端上运行它,而不是使用服务器的方法并将结果推送回客户端,我需要明确指定集合中每个文档的 _ids,否则我将运行进入“错误:不允许。不受信任的代码只能按 ID 更新文档。[403]”。但我怎么能得到呢?还是我应该让它变得简单并使用collection.allow()?还是只有这样?
【问题讨论】:
标签: javascript node.js mongodb meteor