我想在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);完成渲染后调用它。我该如何用流星的最佳做法写这篇文章?

最佳答案

一旦当前无效的每个计算都重新运行,请使用Tracker.afterFlush注册要运行的自定义代码,尤其是负责重新渲染模板的反应性模板计算,并在{{#if startQuiz}}变为真实后插入表格标记。

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

关于javascript - meteor 在Session.set之后触发一个事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31507761/

10-09 23:36