Попытка получить шаблон 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'),

Другие вопросы по тегам