Попытка получить шаблон act.rb для рендеринга в opal с использованием opal-jquery, работала, сейчас это не
Я признаю, что это похоже на мой предыдущий вопрос, но это не совсем то же самое. Поскольку в конце концов я использую 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
и я не знаю почему. Он должен быть запущен после загрузки домена, поэтому точка монтирования '#view_port'
должен существовать; это определенно существует в дом, как вы можете видеть здесь:
<body>
<section id="main">
<section id="view_port">
</section>
</section>
<div class="hiddendiv common"></div>
</body>
Я даже пытался обернуть его window.addEventListener("load", function () {}
но безрезультатно.
Почему это сейчас не работает? что я пропустил?
1 ответ
ОК, проблема в том, что Element['#view_port']
внутри render_component
функция вызывалась раньше Document.ready?
и так возвращал ноль. Почему это было, я не знаю, это должно сработать, но это не так, вот так.
Другая проблема, о которой стоит упомянуть (слегка связанная), заключалась в том, что Element['#view_port'][0]
чтобы получить родной объект приводит к ошибке Uncaught TypeError: b.toLowerCase is not a function
так что вы не можете использовать Jquery для получения нативных элементов dom, что означает, что вы застряли с document.getElementById('view_port')
,