根据Meteor文档,将在template_name的每个实例已完成呈现后执行分配给Template.template_name.rendered的回调。我一直在尝试使用此功能的jQuery插件(如TagsManager或DotDotDot)连接到由模板生成的DOM元素。 “自然”的方式来做到这一点会是这样的:将jQuery插件附加到Meteor模板生成的DOM元素
Template.template_name.rendered = function() {
var template = this;
var elem = $('input#tags'+template.data._id);
elem.tagsManager(); // doesn't work
}
但是,这并不工作 - 预期行为不出来附属的元素。 jQuery选择器正常工作,并通过记录tagsManager()
的内部,我可以看到事件处理程序确实似乎被连接,但在.tagsManager()
完成后,它们以某种方式未连接。
在$(document).ready
或短setTimeout
包装代码的“通常”的解决方案,从完全相同的行为遭遇:
Template.template_name.rendered = function() {
var template = this;
$(document).ready(function() {
window.setTimeout(function() {
var elem = $('input#tags'+template.data._id);
elem.tagsManager();
}, 100); // 0.1 seconds + $(document).ready doesn't work
});
}
我只得到它通过提供一个不切实际的高setTimeout
时间来工作,如3秒:
Template.song.rendered = function() {
var template = this;
console.log("Template for "+template.data.title+" created");
$(document).ready(function() {
window.setTimeout(function() {
var elem = $('input#tags'+template.data._id);
elem.tagsManager();
}, 3000); // 3 seconds + $(document).ready works
});
}
作为事实上,即使通过从相同的行为的简单elem.on('click',...)
患有替换elem.tagsManager()
如上所述 - 这就是为什么人s的流星给了我们Template.template_name.events
,我猜。然而,这种断裂的所有有趣的插件,并迫使我们依靠哈克,危险的代码,如上述。有没有更好的办法?
嘿@gabrielhpugliese,在连接插件之前解除焦点工作!不知道为什么,但它确实! –
hehehe酷! :) – gabrielhpugliese