我遇到了以下无法调试的问题:
我有一个我要去的 textarea 字段列表
<template name="sampleTemplate">
<ul>
{{#each listOfTextFields}}
< li > < textarea id="{{_id}}" > </li>
{{/each}}
</ul>
</template>
为了呈现该列表,我有
Template.sampleTemplate.listOfTextFields = function () {
return applicationDB.find({ //some fields })
}
我还有一个映射到 textareas 的事件,当我按下“enter”键时,我将一个新文档插入到集合中。当这种情况发生时,模板会被重新渲染并且新的 textarea 会出现。
Template.sampleTemplate.events({
'keydown enter' : function (enterEv) {
//add new document to collection
Session.set("newTextAreaCreated", 1);
Session.set("newItemId", newItemId);
}
}
然后...为了使它对用户更友好,我尝试将 focus() 放在那个新创建的文档上。所以我在我的渲染函数中有:
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 字段时有效,当我按下回车键时,它成功创建了新项目,并专注于它。我有一大堆其他代码来处理排序,所以新项目肯定是在新项目下面创建的(以防你们中的一些人想知道)。
但是 - 当我在中间的某个地方返回列表时,我按下回车键,它成功地创建了它下面的项目,但是它并没有关注它。我使用了 console.logs 来确保渲染的函数被调用并且确实被调用了,但是焦点并不明显。
这可能与它跳行的文本区域的“输入”效果有关吗?或者可能是完全不同的东西。如果 textareas 引起问题等,我非常乐意实施更好的解决方案。