我为network
模型设置了就地编辑。对于模型的title
和description
,有两个输入字段。当用户点击标题时,它会为<h2>
切换<input>
标记,就像规范的Todos示例一样。
我正在向相关模板添加事件,如下所示:
Template.network_edit.events = {}
Template.network_edit.events['click #network-description'] = ->
Session.set('editing_network_description',true)
Meteor.flush()
focus_field_by_id('network-description-input')
Template.network_edit.events['click #network-title'] = ->
Session.set('editing_network_title',true)
Meteor.flush()
focus_field_by_id('network-title-input')
focus_field_by_id
功能是,
var focus_field_by_id = function (id) {
var input = document.getElementById(id);
if (input) {
input.focus();
input.select();
}
};
一切都按预期工作,但当我点击#network-description
时,我在控制台中看到错误:
Uncaught TypeError: Cannot read property 'parentNode' of null
在liveui.js
的第600行抛出。当我点击#network-title
时,我没有收到任何此类错误。
如果我颠倒事件的顺序,先将#network-title
事件和network-description
秒放在一起,我会在点击#network-title
时收到错误。通常,添加的第一个事件会抛出此错误,但不会引发后续事件。
正如我所说,一切看似正常(输入显示,获得焦点等),但错误令人不安,我可能会遗漏一些东西。
答案 0 :(得分:3)
啊哈,我能够重现这一点。
这是在事件处理期间DOM发生变异时发生的错误。调用Meteor.flush()
后,事件的原始目标不再出现在模板中。 Meteor的事件处理代码窒息,可能在检查第二个处理程序是否适用时,因此第一个处理器似乎中断的原因。错误是无害的,你没有做错任何事。
正在为下一个版本重写事件处理,并且我已针对新代码已经过的情况进行了回归测试。
感谢您提供报告并耐心等待。