Meteor DOM元素在创建时不会更新

时间:2014-06-14 22:24:43

标签: meteor

我刚刚在阅读了“探索流星”一书后开始使用Meteor,并且一直在敲打一个非常讨厌的问题。我想我缺少一些基础知识,因为我似乎无法弄明白。

目标很简单。用户在创建帐户时获得一个球,并且只能移动他自己的球。没有什么花哨。 问题在于:在用户创建/首次登录时,用户可以看到他的球并且应用程序突出显示它。但是当使用箭头键时,只有其他浏览器/会话可以看到球移动。如果新创建的用户刷新,则球会在所有浏览器/会话上移动。

相关的代码:

Deps.autorun(function() {
if (!Meteor.user()) {
    //user logged out
    Session.set('session_ball', null);
} else {
    //user logged in
    var user = Meteor.user(),
        ballId = false;

    //check if the user has a ball yet
    if (!user.profile.hasBall) {
        var ball = {},
            x = parseInt(Math.random() * (500 - 200) + 200, 10),
            y = parseInt(Math.random() * (500 - 200) + 200, 10),
            name = 'ball_' + x + '_' + y;

        ball.name = name;
        ball.x = x;
        ball.y = y;
        ball.owner = user._id;

        Meteor.call('addBall', ball, function (error, id) {
            if (error) {
                console.log('error with adding ball');
            } else {
                //update the user's hasball property
                Meteor.users.update(user._id, {$set: {"profile.hasBall": true}});

                console.log('made new user ball');

            }
        });
    }
}
});

和方法:

Meteor.methods({
addBall: function(ball) {
    var user = Meteor.user();

    // ensure the user is logged in
    if (!user || !ball) {
        throw new Meteor.Error(401, 'Oh Balls');
    }

    var ballId = Balls.insert(ball);

    return ballId;
},
moveBall: function(options) {
    if (!options) {
        throw new Meteor.Error(401, 'Oh Balls');
    }

    if (Balls.findOne({_id: options.ballId, owner: Meteor.userId()})) {
        Balls.update(options.ballId, {$inc: {x: options.x, y: options.y}});
    }

    return options.ballId;
}
});

由于流星项​​目中的代码分散在一堆不同的文件中,因此可能更容易在GitHub上看到该项目。

0 个答案:

没有答案