在Session.set之后,Meteor会触发一个事件

时间:2015-07-20 01:38:02

标签: javascript session meteor

我想在Session.set("quizStarted", true);

之后将输入框聚焦在我的模板中
Template.quiz.startQuiz = function(){
    return Session.get("quizStarted");
 }

startQuizAnimate = function(){
    Session.set("quizStarted", true);

    $('.answerBox').focus();   //THIS LINE DOES NOT FOCUS
 }

Template.quiz.events({
  'click #startQuiz' : function(){
    startQuizAnimate();
  }
}


<template name="quiz">

 <button id="startQuiz">Start!</button>

  {{#if startQuiz}}

    <form class="answer">
      // I want to focus this input text
      <input type="text" class="answerBox" name="text" placeholder="Type your answer here" />
    </form>
  {{/if}}
  </div>
</template>

{{#if startQuiz}}内的块包含我想要关注的输入,但我必须在Session.set("quizStarted", true);完成渲染后调用它。我怎样才能用Meteor的最佳实践来写这个?

1 个答案:

答案 0 :(得分:3)

使用Tracker.afterFlush注册要在当前无效的每个计算重新运行后运行的自定义代码,特别是负责重新呈现模板并在{{#if startQuiz}}变为真实后插入表单标记的反应模板计算。

function startQuizAnimate(){
  Session.set("quizStarted", true);
  Tracker.afterFlush(function(){
    $('.answerBox').focus();
  });
}