为什么我不能在Meteor JS中使用集合数据

时间:2014-09-15 20:03:01

标签: meteor

我试图制作一款简单的游戏。这是代码:

Template.my_player.player = function(){

    var players = Players.find({ userId: Meteor.userId() });

    Session.set("this_x", 5); // WORKS
    Session.set("this_x", players.my_x); // DOESNT WORK

    return players;

};

我试图找到并记住玩家的位置。后来,我试图找到其他人在同一个X和Y平方上,并且它不会工作。

// ==============
// PLAYERS IN AREA
// ==============
Template.players.players = function(data){

    var my_player = Players.find({ userId: Meteor.userId() });

    var players = Players.find({ my_x: my_player.my_x });

    return players;

};

在这两种情况下,我都无法使用我刚刚搜索过的数据。提前谢谢。

2 个答案:

答案 0 :(得分:0)

那是因为

var players = Players.find({ userId: Meteor.userId() });

返回一个游标。所以如果你试着这样做:

var players = Players.find({ userId: Meteor.userId() });
console.log(players.my_x); //undefined

players.my_x为您提供了undefined,因为您尝试访问未定义的游标属性。

您需要使用findOne:

var player = Players.findOne({ userId: Meteor.userId() });
if (player) {
    console.log(player.my_x); //logs player position
}

上面的代码将找到登录用户。如果用户未登录,则播放器变量将不确定。使用console.log()进行调试。这很容易。

答案 1 :(得分:0)

原来我必须使用IF语句!在我可以使用它之前,我必须检查数据是否存在。我不确定为什么,但我希望这会对某人有所帮助!

// ==============
// PLAYERS IN AREA
// ==============
Template.players.players = function(){

    var player = Players.findOne({ userId: Meteor.userId() });
    if(player){
        console.log(player.my_x);
        var players = Players.find({ my_x: player.my_x});
    }

    return players;

};

注意是否(玩家){

一旦我将代码包装在其中,它就神奇地起作用了。男孩这与PHP不同......