尝试使用 opal-jquery 获取 react.rb 模板以在蛋白石中呈现,但现在无法正常工作

Trying to get react.rb template to render in opal using opal-jquery, was working now it's not

我承认这与我之前的一个问题类似,但并不完全相同。 因为我最终使用了 ajax 请求,所以我决定将 opal-jquery 添加到我的堆栈中,(除非你知道更简单的方法)并切换到使用 Document.ready? 提供的函数它。

我的函数现在看起来像这样:

def render_component component,mount_point
   React.render React.create_element(component), Element.find[mount_point][0]
end

我这样称呼它:

Document.ready? do
    render_component LoginForm, '#view_port'
end

问题是之前可以,现在不行了,我收到一个 Uncaught NoMethodError: undefined method '[]' for nil 错误,它本来可以,然后突然开始这样做。

错误是因为由于某种原因 Element.find[mount_point] 正在返回 nil 而我不知道为什么。在 dom 加载后它应该是 运行 所以挂载点 '#view_port' 应该存在;它肯定存在于 dom 中,您可以在此处看到:

<body>
  <section id="main">
    <section id="view_port">  
    </section>
  </section>

<div class="hiddendiv common"></div>
</body>

我什至试过用 window.addEventListener("load", function () {} 包装它,但没有效果。

为什么现在不工作了?我错过了什么?

好的,问题是 render_component 函数中的 Element['#view_port']Document.ready? 之前被调用,因此返回 nil。为什么这是我不知道,它应该工作,但它不是,所以你去了。

另一个值得一提的问题(稍微相关)是尝试 Element['#view_port'][0] 获取本机对象会导致错误 Uncaught TypeError: b.toLowerCase is not a function 因此您不能使用 Jquery 获取本机 dom 元素,这意味着您坚持使用 document.getElementById('view_port').