使用Meteor进行就地编辑:无法读取属性';parentNode';空的
我已经为使用Meteor进行就地编辑:无法读取属性';parentNode';空的,meteor,Meteor,我已经为网络模型设置了适当的编辑设置。有两个输入字段,分别用于模型的标题和说明。当用户单击标题时,它会为一个切换出标记,就像在规范的TODO示例中一样 我正在向相关模板添加事件,如下所示: Template.network_edit.events = {} Template.network_edit.events['click #network-description'] = -> Session.set('editing_network_description',true)
网络
模型设置了适当的编辑设置。有两个输入字段,分别用于模型的标题
和说明
。当用户单击标题时,它会为一个
切换出
标记,就像在规范的TODO示例中一样
我正在向相关模板添加事件,如下所示:
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\u field\u by\u id
函数为
var focus_field_by_id = function (id) {
var input = document.getElementById(id);
if (input) {
input.focus();
input.select();
}
};
一切正常,但当我点击#网络描述
,我在控制台中看到一个错误:
Uncaught TypeError: Cannot read property 'parentNode' of null
在liveui.js
的第600行抛出。当我点击#网络标题
,我没有收到这样的错误
如果我颠倒事件顺序,将#网络标题
事件放在第一位,然后将网络描述
放在第二位,那么当我点击#网络标题
时会收到错误。通常,添加的第一个事件会引发此错误,但不会引发后续事件
正如我所说,一切看起来都正常工作(输入显示、获得焦点等),但错误令人不安,我可能遗漏了一些东西。啊哈,我能够重现这一点 这是一个在事件处理期间DOM发生变化时发生的错误。调用Meteor.flush()后,事件的原始目标不再位于模板中。Meteor的事件处理代码阻塞,可能是在检查第二个处理程序是否适用时,因此第一个处理程序似乎中断了。这个错误是无害的,你没有做错任何事 事件处理正在为下一个版本重写,对于这种情况,我有一个回归测试,新代码已经通过了
感谢您的报告和耐心。这个项目部署在我可以查看的地方了吗?请发布您的
focus\u field\u by\u id
函数。我添加了focus\u field\u by\u id函数的定义,尽管即使这些调用被注释掉,也会抛出错误。我现在还没有把它发布到任何地方,但是我会发布的。嗯,我不认为这段代码中有bug。该错误意味着未定义某些内容,在meteor中,这通常意味着数据库尚未完成加载。或者,当您需要对象时,模板帮助程序返回null。或者尚未设置会话变量。这些是我想去的地方。谢谢你的意见。问题可以缩小到Meteor.flush()
调用。如果我将其注释掉,我不会收到错误。如果我将最后两行代码包装到Meteor.defer中,就像Meteor.defer Meteor.flush()中一样,我可以让一切都正常运行;按id(“网络描述输入”)聚焦字段非常奇怪。尽管如此,Meteor.defer
似乎修复了它,这进一步支持了某些东西还没有完成加载的想法Meteor.defer
只是setTimeout的包装。我希望我能给出一个真实的答案——对不起。