尝试使用 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')
.
我承认这与我之前的一个问题类似,但并不完全相同。
因为我最终使用了 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')
.