如何使用Meteor中的FlowRouter将输入集中在subscriptionsReady上

如何使用Meteor中的FlowRouter将输入集中在subscriptionsReady上,meteor,autofocus,flow-router,Meteor,Autofocus,Flow Router,在使用Iron Router并尝试建立一些最佳实践之后,我现在已经习惯了使用FlowRouter。我在模板级别订阅我的收藏 以前我一直在等待模板使用onRendered进行渲染,然后针对我的输入字段应用focus(),但是现在我只尝试在订阅准备就绪时使用以下命令在Blaze中显示我的模板(请原谅Jade,但我认为在这种情况下非常清楚) 因此,基本思想是,在订阅准备就绪之前,微调器将显示。我现在遇到的问题是,即使在模板渲染时,焦点也不会应用。我尝试了各种方法将其包装在一个autorun调用中,但不

在使用Iron Router并尝试建立一些最佳实践之后,我现在已经习惯了使用FlowRouter。我在模板级别订阅我的收藏

以前我一直在等待模板使用
onRendered
进行渲染,然后针对我的输入字段应用
focus()
,但是现在我只尝试在订阅准备就绪时使用以下命令在Blaze中显示我的模板(请原谅Jade,但我认为在这种情况下非常清楚)

因此,基本思想是,在订阅准备就绪之前,微调器将显示。我现在遇到的问题是,即使在模板渲染时,焦点也不会应用。我尝试了各种方法将其包装在一个
autorun
调用中,但不确定当与此方法结合使用时,尝试以第一个字段为目标的最佳方法是什么

Template.subjectNew.onRendered(function() {
  console.log('rendered');
  $('input').first().focus();
});
可能吗


非常感谢您的建议。

我认为使用自动运行是一种很好的方法,但是您必须在呈现表单后等待设置焦点

比如:

Template.subjectNew.onRendered(function() {
  this.autorun(() => {
    if (this.subscriptionsReady()) {
      Tracker.afterFlush(() => $('input').first().focus());
    }
  });
});

我认为使用自动运行是一种很好的方法,但是在呈现表单之后,您必须使用等待来设置焦点

比如:

Template.subjectNew.onRendered(function() {
  this.autorun(() => {
    if (this.subscriptionsReady()) {
      Tracker.afterFlush(() => $('input').first().focus());
    }
  });
});

您的
subjectNew
即使仅显示微调器,也会被视为渲染。只要坚持你的观点:

form
input(type="text" name="name")
将焦点代码附加到另一个模板的
onRendered
处理程序中

template(name="subjectNew")
  unless Template.subscriptionsReady
    +spinner
  else
    +myForm

template(name="myForm")  
  form
  input(type="text" name="name")
js:


您的
subjectNew
即使仅显示微调器,也会被视为渲染。只要坚持你的观点:

form
input(type="text" name="name")
将焦点代码附加到另一个模板的
onRendered
处理程序中

template(name="subjectNew")
  unless Template.subscriptionsReady
    +spinner
  else
    +myForm

template(name="myForm")  
  form
  input(type="text" name="name")
js:


谢谢@michel这是一个很好且优雅的解决方案,尽管它确实意味着更多的模板分散在周围。谢谢@michel这是一个很好且优雅的解决方案,尽管它确实意味着更多的模板分散在周围。谢谢你的回答!谢谢你的回答!