使用Meteor进行就地编辑:无法读取null的属性“parentNode”

时间:2012-05-04 13:56:48

标签: meteor

我为network模型设置了就地编辑。对于模型的titledescription,有两个输入字段。当用户点击标题时,它会为<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时收到错误。通常,添加的第一个事件会抛出此错误,但不会引发后续事件。

正如我所说,一切看似正常(输入显示,获得焦点等),但错误令人不安,我可能会遗漏一些东西。

1 个答案:

答案 0 :(得分:3)

啊哈,我能够重现这一点。

这是在事件处理期间DOM发生变异时发生的错误。调用Meteor.flush()后,事件的原始目标不再出现在模板中。 Meteor的事件处理代码窒息,可能在检查第二个处理程序是否适用时,因此第一个处理器似乎中断的原因。错误是无害的,你没有做错任何事。

正在为下一个版本重写事件处理,并且我已针对新代码已经过的情况进行了回归测试。

感谢您提供报告并耐心等待。