渲染流星模板后运行JS

我有一个模板,看起来像这样:
<template name="foo">
  <textarea name="text">{{contents}}</textarea>
</template>

我用:

Template.foo = function() {
  return Foos.find();
}

我有一些事件处理程序:

Template.foo.events = {
  'blur textarea': blurHandler
}

我想做的是根据其内容的大小设置textarea的rows属性.我意识到我可以写一个Handlebars帮助器,但是它不能访问被渲染的DOM元素,这将迫使我做一些不必要的重复.我想要的是,理想情况下,流星在呈现元素后触发事件.就像是:

Template.foo.events = {
  'render textarea': sizeTextarea
}

这可能吗?

解决方法

我认为目前最好的方法是这样做(这有点黑客)是使用Meteor.defer ala Callback after the DOM was updated in Meteor.js.

杰夫是流星开发者之一,所以他的话是福音:)

所以在你的情况下,你可以这样做:

<textarea id="{{attach_textarea}}">....</textarea>

Template.foo.attach_textarea = function() {
   if (!this.uuid) this.uuid = Meteor.uuid();

   Meteor.defer(function() {
     $('#' + this.uuid).whatever();
   });

   return this.uuid;
 }

编辑

请注意,作为0.4.0,您可以通过特殊方式(如Sander所指出):

Template.foo.rendered = function() {
  $(this.find('textarea')).whatever();
}

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...