我有一个模板,看起来像这样:
<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(); }