我正在浏览David Turnbull撰写的你的第一个流星应用的methods章节。
我有一种更新数据库中字段的方法。
'modifyPlayerScore': function(selectedPlayer, scoreValue){
PlayersList.update(selectedPlayer, {$inc: {score: scoreValue} });
}
从事件函数
调用这些方法'click .increment': function(){
var selectedPlayer = Session.get('selectedPlayer');
Meteor.call('modifyPlayerScore', selectedPlayer, 5);
},
'click .decrement': function(){
var selectedPlayer = Session.get('selectedPlayer');
Meteor.call('modifyPlayerScore', selectedPlayer, -5);
}
当我在应用程序中使用此功能时,我在终端
中看到错误Exception while invoking method 'modifyPlayerScore' MongoError: Modifier $inc allowed for numbers only
我使用了console.log语句来打印scoreValue变量,它显示5或-5。我有一种感觉,这可能是一个字符串,而不是一个数字,但我不知道如何解决这个错误。在此先感谢您的帮助!
答案 0 :(得分:4)
当您将分数添加到玩家时:
PlayersList.insert({name: 'test', score:3});
我想,你可以提高分数。但现在不行了。
这是因为您传递了一个文本参数而不是整数。 添加播放器时,应使用parseInt():
PlayersList.insert({
name: name,
score: parseInt(score),
createdBy: Meteor.userId()
})
现在,它应该工作。或者您可以使用parseInt()来设置score
答案 1 :(得分:2)
您应该将Meteor.method
更改为此。
在$inc
上移除5
静态并放置第二个参数(scoreValue
)。
该方法应如下所示。
modifyPlayerScore': function(selectedPlayer, scoreValue){
PlayersList.update(selectedPlayer, {$inc: {score: scoreValue} });
}
现在你可以这样打电话了。
Meteor.call('modifyPlayerScore', selectedPlayer, 5);
其中 5 现在是scoreValue
参数
<强>更新强>
我让this working MeteorPad检查你有这样的一切。
NEW METEORPAD
我根据this meteor创建了gist个pad,以及它的所有功能。
答案 2 :(得分:1)
我在上面由yoh建议的PlayerList.insert中的分数上使用了parse int,它适用于新条目。分数的旧条目仍保存为字符串,因此增量和减量不起作用。删除旧条目并重新开始,它应该有效。