我遇到了无法调试的下列问题:
我有一个textarea字段列表
<template name="sampleTemplate">
<ul>
{{#each listOfTextFields}}
< li > < textarea id="{{_id}}" > </li>
{{/each}}
</ul>
</template>为了把这份名单列出来,我
Template.sampleTemplate.listOfTextFields = function () {
return applicationDB.find({ //some fields })
}我还有一个事件映射到文本区域,当我按下"enter“键时,我会将一个新文档插入到集合中。当发生这种情况时,将重新呈现模板,并显示新的textarea。
Template.sampleTemplate.events({
'keydown enter' : function (enterEv) {
//add new document to collection
Session.set("newTextAreaCreated", 1);
Session.set("newItemId", newItemId);
}
}然后..。为了使它更易于用户使用,我尝试将注意力集中在新创建的文档上。所以在我的函数中:
Template.sampleTemplate.rendered = function () {
if (Session.get("newTextAreaCreated") == 1){
console.log("new text area is created")
$(document.getElementById(Session.get("newItemId")).focus();
}
Session.set("newTextAreaCreated", 0);
}当我当前在上一个textarea字段时,上面的代码工作,当我按enter键时,它成功地创建了新项,并将重点放在它上。,我有一堆处理排序的其他代码,所以新条目肯定是在新条目下创建的(以防万一有些人会怀疑)。
但是-当我在中间的某个地方返回列表时,我按enter键,它成功地创建了它下面的项目,但是它没有关注它。我使用console.logs来确保调用呈现的函数,但重点并不明显。
这可能与它跳出一行的文本区域的“enter”效应有关吗?或者是完全不同的东西。我非常乐意实现一个更好的解决方案,如果文本区域正在造成问题等。
发布于 2013-11-15 15:12:05
在列表项周围放置{{#隔离}}块,并将文档插入委托给服务器端流星方法。隔离帮助程序将确保父模板不会重新呈现,服务器端流星方法将确保模拟不会在集合插入上运行。通过这种方式,呈现()只能触发一次,并且可以执行与DOM相关的事情,如聚焦或动画。
https://stackoverflow.com/questions/19999481
复制相似问题