【问题标题】:Meteor autoform does not wait for element to exist in DOMMeteor autoform 不等待元素在 DOM 中存在
【发布时间】:2015-03-18 19:15:21
【问题描述】:

我正在通过以下方式向文档添加渲染模板:

Blaze.renderWithData(Template.page, Session.get(toAdd[i]), document.getElementById('pages'))

这很好用...除了有时使用 autoform。我不确定是什么触发了它发生,但我的一些自动表单(可以存在于Template.page 中,它们通过传入的数据动态添加到该模板)显示,而其他则引发客户端错误:

Uncaught TypeError: Cannot read property 'formValues' of undefined :: autoform-inputs.js:162 
markChanged :: autoform-inputs.js:169 
updateTrackedFieldValue :: afFieldInput.js:72

在第 71 行的那个 afFieldInput.js 中有一个 timeout 设置为 0。将其提高到 500 可以修复上述错误,但很麻烦并会导致其他问题。

我能猜到的最好的结果是,autoform 试图在表单存在于 DOM 之前通过 id 从 DOM 中获取表单,如果我不得不猜测的话,它可能通过 Blaze 作为文档片段存在。

我可以确认 AutoForm.templateInstanceForForm 获得了正确的表单 ID,但 document.getElementById(formId) 返回 null。

另一种可能性是 Blaze 出于某种原因未能渲染模板但没有警告我。

【问题讨论】:

    标签: meteor meteor-blaze meteor-autoform


    【解决方案1】:

    我已经走了。

    我已更改架构,但试图打开一个包含不正确数据的文档以用于新架构。如果有人遇到相同的错误,将发布此答案。

    另外,显然,不要将对象或函数一直传递到 autoform 不期望的模板。您仍然可以访问它们,但通过将 attr 声明为帮助程序中的函数,将它们从 attr 对象中删除,返回 this.attr 没有任何不需要发送到模板的对象。

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多