我有一个函数,它接受一个字符串并根据在集合中查找文档来设置会话。在这种特殊情况下,字符串是游戏的可能名称name
,我将把 Session 设置为该游戏的_id
问题是当我将它绑定到模板事件时,该函数完全按预期工作,但当我在Meteor.startup
. 仅供参考-截至目前,我正在运行自动发布。(我计划在这一步之后调整发布/订阅设置。)
这是接受字符串并适当设置会话的函数:
var enterExisting = function(n) {
var g = Games.findOne({name:n});
var e = "That game doesn't exist.";
Session.set("error", null);
Session.set("no_game", null);
if (Validation.game_exists(n)){
Validation.clear();
Session.set("current_game", g._id);
window.location.hash = ("/" + n);
} else {
Session.set("error", e)
}
};
在主页上,我在表单上使用此功能,它按预期工作。它设置会话、显示游戏并更改 URL。这就是它在该表单上的使用方式:
Template.entergame.events({
'click input.enter-game': function(){
var n = document.getElementById('enter-game-name').value;
enterExisting(n);
}
});
当我尝试以类似的方式使用相同的功能时,Meteor.startup
它不会设置会话或指导我。
Meteor.startup(function () {
Session.set("current_game", "");
Session.set("error", null);
Session.set("no_game", null);
var n = location.hash.substring(2);
if (n.length === 0) {
window.location.hash = "#/"
} else {
enterExisting(n);
}
});
我不认为它是相关的,但以防万一这里是“加入游戏”表单的模板:
<template name="entergame">
<div class="enter-game">
{{#if error}}
<p class="error bad-entry">
{{error}}
</p>
{{/if}}
<input id="enter-game-name" type="text" placeholder="Join an Existing Game!" />
<input type="button" class="enter-game" value="»">
</div>
</template>