根據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