我承认这与我之前的一个问题相似,但它并不完全相同。
由于我最终使用了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 () {}
中但不起作用。
为什么现在不工作?我错过了什么?
答案 0 :(得分: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')
。