2

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

在第 600 行抛出liveui.js。当我点击 时#network-title,我没有收到这样的错误。

如果我颠倒事件的顺序,将#network-title事件放在第一位,然后是network-description第二位,则当我点击时会收到错误#network-title消息。通常,添加的第一个事件会引发此错误,但不会引发后续事件。

正如我所说,一切似乎都正常工作(输入出现,获得焦点等),但错误令人不安,我可能会遗漏一些东西。

4

1 回答 1

3

啊哈,我能够重现这个。

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

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

感谢您的报告和您的耐心等待。

于 2012-05-08T07:12:38.040 回答