1

我承认这与我之前的问题相似,但并不完全相同。由于我最终使用了 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 () {}但没有效果。

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

4

1 回答 1

0

好的,问题是函数Element['#view_port']内部render_component之前被调用过Document.ready?,所以返回 nil。为什么会这样,我不知道,它应该可以工作,但事实并非如此,所以你去吧。

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

于 2015-08-18T10:54:18.577 回答